commit 264d531fdc1e35d5dbba74afd950bce695a8ce41 Author: Scaffolder Date: Tue May 5 13:50:44 2026 +0000 initial commit Change-Id: I860821ca882fd9717c02879c18a7d9049a089aaa diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..f8102bc --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,11 @@ +# Not actually used by the devcontainer, but it is used by gitpod +ARG VARIANT=17-bullseye +FROM mcr.microsoft.com/vscode/devcontainers/java:0-${VARIANT} +ARG NODE_VERSION="none" +RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi +ARG USER=vscode +VOLUME /home/$USER/.m2 +VOLUME /home/$USER/.gradle +ARG JAVA_VERSION=17.0.7-ms +RUN sudo mkdir /home/$USER/.m2 /home/$USER/.gradle && sudo chown $USER:$USER /home/$USER/.m2 /home/$USER/.gradle +RUN bash -lc '. /usr/local/sdkman/bin/sdkman-init.sh && sdk install java $JAVA_VERSION && sdk use java $JAVA_VERSION' \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..3aa67af --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,25 @@ +{ + "name": "Java", + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "ghcr.io/devcontainers/features/java:1": { + "version": "21-oracle", + "jdkDistro": "oracle" + }, + "ghcr.io/devcontainers/features/azure-cli:1": {}, + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/github-cli:1": {} + }, + + "customizations": { + "vscode": { + "settings": {}, + "extensions": [ + "redhat.vscode-xml", + "visualstudioexptteam.vscodeintellicode", + "vscjava.vscode-java-pack" + ] + } + }, + "remoteUser": "vscode" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4e509a4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,24 @@ +# top-most EditorConfig file +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space + +[*.{java,xml}] +indent_size = 4 +trim_trailing_whitespace = true +indent_style = tab +tab_width = 4 + +[{pom,wro}.xml] +indent_size = 2 +indent_style = space + +[*.{html,sql,less}] +indent_size = 2 + +[*.gradle] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8a09fad --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +/mvnw text eol=lf +*.cmd text eol=crlf +*.java text eol=lf + +/gradlew text eol=lf +*.bat text eol=crlf diff --git a/.gitea/workflows/build-push.yml b/.gitea/workflows/build-push.yml new file mode 100644 index 0000000..66659a4 --- /dev/null +++ b/.gitea/workflows/build-push.yml @@ -0,0 +1,84 @@ +name: Build and Push to ACR + +on: + push: + branches: [ dev ] + workflow_dispatch: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + AZURE_FEDERATED_TOKEN_FILE: /var/run/secrets/azure/tokens/azure-identity-token + +jobs: + build: + name: Build and Push + runs-on: ubuntu-latest + if: >- + github.ref != 'refs/heads/main' && ( + github.event_name == 'workflow_dispatch' || + (github.event_name == 'push' && github.event.before != '0000000000000000000000000000000000000000') + ) + permissions: + contents: read + id-token: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Azure CLI + run: | + command -v az &>/dev/null || curl -sL https://aka.ms/InstallAzureCLIDeb | bash + + - name: Install Docker CLI + run: | + command -v docker &>/dev/null || (apt-get update -qq && apt-get install -y docker.io) + docker --version + + - name: Azure login (OIDC) + run: | + az login \ + --service-principal \ + --username "$AZURE_CLIENT_ID" \ + --tenant "$AZURE_TENANT_ID" \ + --federated-token "$(cat $AZURE_FEDERATED_TOKEN_FILE)" + echo "✓ Azure login successful" + + - name: Get ACR details + run: | + ACR_NAME=$(az acr list --query "[0].name" -o tsv) + ACR_NAME="${ACR_NAME:-bstagecjotdevacr}" + echo "ACR_NAME=$ACR_NAME" >> $GITHUB_ENV + echo "ACR_LOGIN_SERVER=${ACR_NAME}.azurecr.io" >> $GITHUB_ENV + echo "✓ Using ACR: ${ACR_NAME}.azurecr.io" + + - name: ACR Login + run: | + ACR_TOKEN=$(az acr login --name "$ACR_NAME" --expose-token --output tsv --query accessToken) + docker login "$ACR_LOGIN_SERVER" \ + --username 00000000-0000-0000-0000-000000000000 \ + --password "$ACR_TOKEN" + echo "✓ ACR login successful" + + - name: Build and Push Docker image + run: | + IMAGE_TAG="${{ gitea.sha }}" + IMAGE_FULL="${ACR_LOGIN_SERVER}/petclinic-demo-andrej-doc:${IMAGE_TAG}" + IMAGE_LATEST="${ACR_LOGIN_SERVER}/petclinic-demo-andrej-doc:latest" + docker build -t "$IMAGE_FULL" -t "$IMAGE_LATEST" . + docker push "$IMAGE_FULL" + docker push "$IMAGE_LATEST" + echo "IMAGE_FULL=$IMAGE_FULL" >> $GITHUB_ENV + echo "✓ Pushed: $IMAGE_FULL" + + - name: Build Summary + run: | + echo "### ✅ Build Successful" >> $GITHUB_STEP_SUMMARY + echo "| | |" >> $GITHUB_STEP_SUMMARY + echo "|---|---|" >> $GITHUB_STEP_SUMMARY + echo "| **Service** | petclinic-demo-andrej-doc |" >> $GITHUB_STEP_SUMMARY + echo "| **Commit** | ${{ gitea.sha }} |" >> $GITHUB_STEP_SUMMARY + echo "| **Image** | $IMAGE_FULL |" >> $GITHUB_STEP_SUMMARY diff --git a/.gitea/workflows/integration-test.yml b/.gitea/workflows/integration-test.yml new file mode 100644 index 0000000..757b895 --- /dev/null +++ b/.gitea/workflows/integration-test.yml @@ -0,0 +1,138 @@ + +name: Integration Test + +on: + pull_request: + branches: [ "main" ] + workflow_dispatch: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + # ── Job 1: Platform Conformance ─────────────────────────────────────────── + platform-check: + name: Platform Conformance + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate catalog-info.yaml + run: | + if [ ! -f catalog-info.yaml ]; then + echo "✗ catalog-info.yaml not found" + exit 1 + fi + python3 -c "import yaml; list(yaml.safe_load_all(open('catalog-info.yaml')))" 2>/dev/null \ + || (pip install pyyaml -q && python3 -c "import yaml; list(yaml.safe_load_all(open('catalog-info.yaml')))") + echo "✓ catalog-info.yaml is valid YAML" + + - name: Check platform files + run: | + ERRORS=0 + for f in catalog-info.yaml; do + if [ ! -f "$f" ]; then + echo "✗ Missing: $f" + ERRORS=$((ERRORS+1)) + else + echo "✓ Found: $f" + fi + done + if [ $ERRORS -gt 0 ]; then exit 1; fi + + # ── Job 2: Unit Tests + Container Smoke ─────────────────────────────────── + smoke-test: + name: Unit Tests + Container Smoke + runs-on: ubuntu-latest + needs: platform-check + timeout-minutes: 20 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Free disk space + run: | + docker system prune -f 2>/dev/null || true + df -h / 2>/dev/null || true + + - name: Install Docker CLI + run: command -v docker &>/dev/null || (apt-get update -qq && apt-get install -y docker.io) + + - name: Build container image + run: | + if [ -f Dockerfile ]; then + docker build -t ci-image:test . + else + echo "No Dockerfile found — skipping container smoke test" + echo "SKIP_SMOKE=true" >> $GITHUB_ENV + fi + + - name: Start service and wait for health + if: env.SKIP_SMOKE != 'true' + run: | + CONTAINER_NAME="ci-${GITHUB_RUN_ID}" + PORT="${CONTAINER_PORT:-8080}" + HEALTH_PATH="${HEALTH_ENDPOINT:-/health}" + echo "CONTAINER_NAME=${CONTAINER_NAME}" >> $GITHUB_ENV + echo "CONTAINER_PORT=${PORT}" >> $GITHUB_ENV + echo "HEALTH_PATH=${HEALTH_PATH}" >> $GITHUB_ENV + + docker run -d --name "${CONTAINER_NAME}" -e OTEL_SDK_DISABLED=true ci-image:test + + for i in $(seq 1 10); do + CONTAINER_IP=$(docker inspect "${CONTAINER_NAME}" --format '{{.NetworkSettings.IPAddress}}' 2>/dev/null) + [ -n "${CONTAINER_IP}" ] && break + sleep 1 + done + echo "CONTAINER_IP=${CONTAINER_IP}" >> $GITHUB_ENV + + echo "Waiting for ${HEALTH_PATH} on ${CONTAINER_IP}:${PORT} (up to 180s)..." + DEADLINE=$(($(date +%s) + 180)) + while true; do + if curl -sf "http://${CONTAINER_IP}:${PORT}${HEALTH_PATH}" >/dev/null 2>&1; then + break + fi + if [ $(date +%s) -ge $DEADLINE ]; then + echo "Timeout waiting for health check" + docker logs "${CONTAINER_NAME}" 2>&1 | tail -30 + exit 1 + fi + if ! docker ps --filter "name=${CONTAINER_NAME}" --format '{{.Status}}' | grep -q Up; then + echo "Container exited:" + docker logs "${CONTAINER_NAME}" 2>&1 | tail -30 + exit 1 + fi + echo " still waiting..."; sleep 3 + done + echo "✓ Service healthy at ${CONTAINER_IP}:${PORT}${HEALTH_PATH}" + + - name: Validate health response + if: env.SKIP_SMOKE != 'true' + run: | + curl -sf "http://${CONTAINER_IP}:${CONTAINER_PORT}${HEALTH_PATH}" > /tmp/health.json + echo "Health response:" + cat /tmp/health.json + echo "" + echo "✓ Container smoke test: PASSED" + + - name: Cleanup + if: always() + run: docker rm -f "ci-${GITHUB_RUN_ID}" 2>/dev/null || true + + - name: Post commit status + if: always() + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + JOB_STATUS: ${{ job.status }} + run: | + STATE=$([[ "$JOB_STATUS" == "success" ]] && echo "success" || echo "failure") + DESC=$([[ "$STATE" == "success" ]] && echo "All checks passed" || echo "Some checks failed") + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/statuses/${GITHUB_SHA}" \ + -d "{\"state\":\"${STATE}\",\"context\":\"Integration Test / Unit Tests + Container Smoke (workflow_dispatch)\",\"description\":\"${DESC}\"}" \ + || true diff --git a/.gitea/workflows/security-scan.yml b/.gitea/workflows/security-scan.yml new file mode 100644 index 0000000..af4c34b --- /dev/null +++ b/.gitea/workflows/security-scan.yml @@ -0,0 +1,149 @@ +name: Security Scanning + +on: + pull_request: + branches: [ "main" ] + workflow_dispatch: {} + +env: + TRIVY_VERSION: "0.51.1" + GITLEAKS_VERSION: "8.18.4" + COMPONENT_ID: petclinic-demo-andrej-doc + +jobs: + # ───────────────────────────────────────────── + # 1. FILESYSTEM & DEPENDENCY SCAN + # Trivy auto-detects lockfiles (pom.xml, + # package-lock.json, go.sum, requirements.txt, etc.) + # and scans for vulns, secrets, and misconfigs. + # ───────────────────────────────────────────── + trivy-scan: + name: Trivy — Filesystem & Dependency Scan + runs-on: ubuntu-latest + + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Install Trivy + run: | + curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh \ + | sh -s -- -b /usr/local/bin v + + - name: Run Trivy filesystem scan + run: | + trivy fs \ + --exit-code 0 \ + --severity HIGH,CRITICAL \ + --format sarif \ + --output trivy-results.sarif \ + --scanners vuln,secret,misconfig \ + --dependency-tree \ + . + + - name: Upload SARIF report + uses: actions/upload-artifact@v4 + if: always() + with: + name: trivy-sarif + path: trivy-results.sarif + retention-days: 30 + + - name: Print human-readable summary + run: | + trivy fs \ + --exit-code 0 \ + --severity MEDIUM,HIGH,CRITICAL \ + --format table \ + --scanners vuln,secret,misconfig \ + . + + - name: Enforce quality gate (CRITICAL fails build) + run: | + trivy fs \ + --exit-code 1 \ + --severity CRITICAL \ + --scanners vuln,misconfig \ + . + + # ───────────────────────────────────────────── + # 2. SECRET SCAN — detect leaked credentials + # across full git history. + # ───────────────────────────────────────────── + gitleaks-scan: + name: Gitleaks — Secret Scan + runs-on: ubuntu-latest + + steps: + - name: Checkout source (full history) + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Install Gitleaks binary directly — the GitHub Action + # relies on GITHUB_TOKEN which is unavailable on Gitea Act runners. + - name: Install Gitleaks + run: | + curl -sSfL "https://github.com/gitleaks/gitleaks/releases/download/v/gitleaks__linux_x64.tar.gz" \ + | tar -xz -C /usr/local/bin gitleaks + + - name: Run Gitleaks + run: | + gitleaks detect \ + --source . \ + --report-format sarif \ + --report-path gitleaks-results.sarif \ + --exit-code 1 \ + --log-level warn + + - name: Upload SARIF report + uses: actions/upload-artifact@v4 + if: always() + with: + name: gitleaks-sarif + path: gitleaks-results.sarif + retention-days: 30 + + # ───────────────────────────────────────────── + # 3. SUMMARY — aggregate all SARIF reports + # ───────────────────────────────────────────── + security-summary: + name: Security Summary + needs: + - trivy-scan + - gitleaks-scan + runs-on: ubuntu-latest + if: always() + + steps: + - name: Download all SARIF artefacts + uses: actions/download-artifact@v4 + with: + pattern: "*-sarif" + merge-multiple: true + path: sarif-reports/ + + - name: List collected reports + run: ls -lh sarif-reports/ + + - name: Generate summary + run: | + echo "## Security Scan Results — " >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Report | Size |" >> $GITHUB_STEP_SUMMARY + echo "|--------|------|" >> $GITHUB_STEP_SUMMARY + for f in sarif-reports/*.sarif; do + name=$(basename "$f") + size=$(du -sh "$f" | cut -f1) + echo "| $name | $size |" >> $GITHUB_STEP_SUMMARY + done + echo "" >> $GITHUB_STEP_SUMMARY + echo "Commit: \`\`" >> $GITHUB_STEP_SUMMARY + echo "Branch: \`\`" >> $GITHUB_STEP_SUMMARY + + - name: Bundle all SARIF reports + uses: actions/upload-artifact@v4 + with: + name: all-sarif-reports + path: sarif-reports/ + retention-days: 90 diff --git a/.gitea/workflows/sonar.yaml b/.gitea/workflows/sonar.yaml new file mode 100644 index 0000000..8e118da --- /dev/null +++ b/.gitea/workflows/sonar.yaml @@ -0,0 +1,227 @@ + +name: SonarQube Analysis + +on: + pull_request: + types: [opened, synchronize, reopened] + +concurrency: + group: ${{ gitea.workflow }}-${{ gitea.ref }} + cancel-in-progress: true + +jobs: + sonarqube: + name: Build, Test & Analyse + runs-on: ubuntu-latest + timeout-minutes: 15 + + env: + SONAR_PROJECT_KEY: petclinic-demo-andrej-doc + SONAR_ADMIN_TOKEN: ${{ secrets.SONAR_ADMIN_TOKEN }} + SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} + BACKSTAGE_CLEANUP_TOKEN: ${{ secrets.BACKSTAGE_CLEANUP_TOKEN }} + # NOTE: the BACKSTAGE_URL is derived from the environment that triggered the workflow. + # This allows the same workflow to be used across different environments (e.g., dev, staging, prod) without hardcoding environment-specific URLs or requiring additional secrets configuration. + # It is utilised to send a notification to Backstage in case the quality gate fails, so that the relevant teams are alerted and can take action + BACKSTAGE_URL: https://dev-andrej.backstage.kyndemo.live + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Make Maven wrapper executable + run: chmod +x mvnw + + - name: Cache Maven packages + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: maven-${{ runner.os }}-${{ hashFiles('**/pom.xml') }} + restore-keys: maven-${{ runner.os }}- + + - name: Cache SonarQube analysis data + uses: actions/cache@v4 + with: + path: ~/.sonar/cache + key: sonar-${{ runner.os }}-${{ hashFiles('**/pom.xml') }} + restore-keys: sonar-${{ runner.os }}- + + - name: Validate required secrets + run: | + [[ -n "$SONAR_ADMIN_TOKEN" ]] || { echo "::error::SONAR_ADMIN_TOKEN is not set"; exit 1; } + [[ -n "$SONAR_HOST_URL" ]] || { echo "::error::SONAR_HOST_URL is not set"; exit 1; } + [[ -n "$SONAR_PROJECT_KEY" ]] || { echo "::error::SONAR_PROJECT_KEY is not set"; exit 1; } + + SONAR_HOST_URL="${SONAR_HOST_URL%/}" + + AUTH_RESPONSE=$(curl -s -o /tmp/sonar-auth-response.json -w "%{http_code}" \ + -u "${SONAR_ADMIN_TOKEN}:" \ + "${SONAR_HOST_URL}/api/authentication/validate") + + if [[ "$AUTH_RESPONSE" != "200" ]]; then + echo "::error::SonarQube is unreachable or returned HTTP ${AUTH_RESPONSE} — check SONAR_HOST_URL" + exit 1 + fi + + TOKEN_VALID=$(jq -r '.valid' /tmp/sonar-auth-response.json 2>/dev/null || echo "false") + if [[ "$TOKEN_VALID" != "true" ]]; then + echo "::error::SONAR_ADMIN_TOKEN is invalid or has been revoked (SonarQube returned valid=false)" + exit 1 + fi + + echo "✅ SONAR_ADMIN_TOKEN verified against ${SONAR_HOST_URL}" + + - name: Bootstrap SonarQube project and generate scan token + id: sonar-bootstrap + run: | + PROJECT_COUNT=$(curl -sf \ + -u "${SONAR_ADMIN_TOKEN}:" \ + "${SONAR_HOST_URL}/api/projects/search?projects=${SONAR_PROJECT_KEY}" \ + | jq '.paging.total') + + if [[ "$PROJECT_COUNT" == "0" ]]; then + echo "Project '${SONAR_PROJECT_KEY}' not found — creating it..." + curl -sf -X POST \ + -u "${SONAR_ADMIN_TOKEN}:" \ + "${SONAR_HOST_URL}/api/projects/create" \ + --data-urlencode "name=${SONAR_PROJECT_KEY}" \ + --data-urlencode "project=${SONAR_PROJECT_KEY}" \ + --data-urlencode "mainBranch=main" \ + --data-urlencode "visibility=private" + echo "✅ Project created." + else + echo "✅ Project '${SONAR_PROJECT_KEY}' already exists — skipping creation." + fi + + TOKEN_NAME="gitea-scan-${SONAR_PROJECT_KEY}" + curl -sf -X POST \ + -u "${SONAR_ADMIN_TOKEN}:" \ + "${SONAR_HOST_URL}/api/user_tokens/revoke" \ + --data-urlencode "name=${TOKEN_NAME}" \ + > /dev/null 2>&1 || true + + SCAN_TOKEN=$(curl -sf -X POST \ + -u "${SONAR_ADMIN_TOKEN}:" \ + "${SONAR_HOST_URL}/api/user_tokens/generate" \ + --data-urlencode "name=${TOKEN_NAME}" \ + --data-urlencode "type=PROJECT_ANALYSIS_TOKEN" \ + --data-urlencode "projectKey=${SONAR_PROJECT_KEY}" \ + | jq -r '.token') + + [[ -n "$SCAN_TOKEN" ]] || { echo "::error::Failed to generate scan token"; exit 1; } + + echo "✅ Scan token generated for project '${SONAR_PROJECT_KEY}'" + echo "::add-mask::${SCAN_TOKEN}" + echo "SCAN_TOKEN=${SCAN_TOKEN}" >> "$GITHUB_ENV" + + - name: Build and test + run: | + ./mvnw -B verify \ + -Dtest='!PostgresIntegrationTests,!MySqlIntegrationTests' + + - name: SonarQube analysis + run: | + ./mvnw -B org.sonarsource.scanner.maven:sonar-maven-plugin:4.0.0.4121:sonar \ + -Dsonar.projectKey="${SONAR_PROJECT_KEY}" \ + -Dsonar.host.url="${SONAR_HOST_URL}" \ + -Dsonar.token="${SCAN_TOKEN}" \ + -Dsonar.java.source=17 \ + -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml + + - name: Quality Gate check + id: quality-gate + run: | + echo "Waiting for SonarQube to process the analysis..." + for i in $(seq 1 24); do + RESPONSE=$(curl -sf -u "${SCAN_TOKEN}:" \ + "${SONAR_HOST_URL}/api/qualitygates/project_status?projectKey=${SONAR_PROJECT_KEY}" || true) + STATUS=$(echo "$RESPONSE" | jq -r '.projectStatus.status' 2>/dev/null || echo "NONE") + if [[ "$STATUS" =~ ^(OK|ERROR|WARN)$ ]]; then break; fi + echo " Status: ${STATUS:-pending} — retrying in 5s..." + sleep 5 + done + + echo "" + echo "══════════════════════════════════════════" + echo " Quality Gate: $STATUS" + echo "══════════════════════════════════════════" + + echo "$RESPONSE" | jq -r ' + .projectStatus.conditions[] | + if .status == "ERROR" then " ❌ \(.metricKey): \(.actualValue) (threshold: \(.errorThreshold), comparator: \(.comparator))" + elif .status == "WARN" then " ⚠️ \(.metricKey): \(.actualValue) (threshold: \(.errorThreshold), comparator: \(.comparator))" + else " ✅ \(.metricKey): \(.actualValue)" + end' + + echo "══════════════════════════════════════════" + + FAILED=$(echo "$RESPONSE" | jq '[.projectStatus.conditions[] | select(.status == "ERROR")] | length') + if [[ "$FAILED" -gt 0 ]]; then + echo "::error::Quality Gate FAILED — $FAILED metric(s) did not meet threshold" + exit 1 + fi + + - name: Notify Backstage on quality gate failure + if: always() && steps.quality-gate.outcome == 'failure' + run: | + echo "--- Backstage notification debug ---" + echo "BACKSTAGE_URL: ${BACKSTAGE_URL:-}" + echo "BACKSTAGE_CLEANUP_TOKEN set: $([[ -n "$BACKSTAGE_CLEANUP_TOKEN" ]] && echo yes || echo no)" + echo "SONAR_PROJECT_KEY: ${SONAR_PROJECT_KEY:-}" + echo "GITHUB_HEAD_REF: ${GITHUB_HEAD_REF:-}" + + if [[ -z "$BACKSTAGE_URL" ]]; then + echo "::error::BACKSTAGE_URL is not set — cannot send notification" + exit 0 + fi + if [[ -z "$BACKSTAGE_CLEANUP_TOKEN" ]]; then + echo "::error::BACKSTAGE_CLEANUP_TOKEN is not set — cannot send notification" + exit 0 + fi + + PAYLOAD="{ + \"recipients\": { \"type\": \"entity\", \"entityRef\": \"group:default/platform-engineering\" }, + \"payload\": { + \"title\": \"SonarQube Quality Gate Failed\", + \"description\": \"Quality gate failed for ${SONAR_PROJECT_KEY} on branch ${GITHUB_HEAD_REF}.\", + \"link\": \"${SONAR_HOST_URL}/dashboard?id=${SONAR_PROJECT_KEY}\", + \"severity\": \"high\", + \"topic\": \"sonarqube-quality-gate\" + } + }" + + echo "Sending notification to: ${BACKSTAGE_URL}/api/notifications" + + HTTP_CODE=$(curl -s -o /tmp/bs-notify-response.json -w "%{http_code}" \ + -X POST "${BACKSTAGE_URL}/api/notifications" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer ${BACKSTAGE_CLEANUP_TOKEN}" \ + -d "${PAYLOAD}") + + echo "HTTP response code: ${HTTP_CODE}" + echo "Response body:" + cat /tmp/bs-notify-response.json 2>/dev/null || echo "" + + if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 300 ]]; then + echo "✅ Backstage notification sent" + else + echo "⚠️ Backstage notification failed (HTTP ${HTTP_CODE})" + fi + + - name: Revoke scan token + if: always() + run: | + curl -sf -X POST \ + -u "${SONAR_ADMIN_TOKEN}:" \ + "${SONAR_HOST_URL}/api/user_tokens/revoke" \ + --data-urlencode "name=gitea-scan-${SONAR_PROJECT_KEY}" \ + && echo "✅ Scan token revoked" \ + || echo "⚠️ Token revocation failed" diff --git a/.gitea/workflows/techdocs.yml b/.gitea/workflows/techdocs.yml new file mode 100644 index 0000000..16e65a0 --- /dev/null +++ b/.gitea/workflows/techdocs.yml @@ -0,0 +1,109 @@ +name: Build and Publish TechDocs + +on: + push: + branches: [main] + paths: + - "docs/**" + - "mkdocs.yml" + - "catalog-info.yaml" + workflow_dispatch: {} + +env: + TECHDOCS_AZURE_BLOB_CONTAINER_NAME: ${{ secrets.TECHDOCS_AZURE_BLOB_CONTAINER_NAME }} + AZURE_FEDERATED_TOKEN_FILE: /var/run/secrets/azure/tokens/azure-identity-token + AZURE_ACCOUNT_NAME: ${{ secrets.TECHDOCS_AZURE_BLOB_STORAGE_ACCOUNT_NAME }} + ENTITY_NAMESPACE: default + ENTITY_KIND: component + ENTITY_NAME: petclinic-demo-andrej-doc +jobs: + build-and-publish: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # full history for git-revision-date-localized plugin + + # PR #421 review: commented out — prints raw OIDC JWT and AZURE env vars to CI logs (potential credential leak). + # - name: read and set output + # id: read_env + # run: | + # echo "$AZURE_FEDERATED_TOKEN_FILE" + # env | grep AZURE + # echo "$(cat $AZURE_FEDERATED_TOKEN_FILE)" + + # act-based Gitea runners run as root — sudo is not available. + # apt-get is called directly; works whether root or not. + - name: Bootstrap pip + run: | + python3 --version + if python3 -m pip --version 2>/dev/null; then + echo "pip already available" + elif python3 -m ensurepip --version 2>/dev/null; then + python3 -m ensurepip --upgrade + else + apt-get update -qq + apt-get install -y python3-pip + fi + python3 -m pip install --upgrade pip + python3 -m pip --version + + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + python3 -m pip install \ + mkdocs-techdocs-core==1.* \ + mkdocs-git-revision-date-localized-plugin \ + mkdocs-awesome-pages-plugin + + npm install -g @techdocs/cli + npm cache clean --force + + # mkdocs has no dry-run flag — build into a temp dir to validate config + # and catch any broken links or missing pages early. + - name: Validate MkDocs config + run: mkdocs build --strict --site-dir /tmp/mkdocs-validate + + - name: Build TechDocs site + run: | + techdocs-cli generate \ + --source-dir . \ + --output-dir ./site \ + --no-docker \ + --verbose + + # act runners don't include az by default — install via Microsoft's + # official script which works on Debian/Ubuntu without sudo. + - name: Install Azure CLI + run: | + if command -v az &>/dev/null; then + echo "Azure CLI already installed: $(az version --query '"azure-cli"' -o tsv)" + else + curl -sL https://aka.ms/InstallAzureCLIDeb | bash + fi + + - name: Azure login (OIDC) + run: | + az login \ + --service-principal \ + --username "$AZURE_CLIENT_ID" \ + --tenant "$AZURE_TENANT_ID" \ + --federated-token "$(cat $AZURE_FEDERATED_TOKEN_FILE)" + + echo "✓ Azure login successful" + + - name: Publish TechDocs site + run: | + echo "$AZURE_ACCOUNT_NAME" + echo "$ENTITY_NAMESPACE" + echo "$ENTITY_KIND" + echo "$ENTITY_NAME" + techdocs-cli publish \ + --publisher-type azureBlobStorage \ + --storage-name "techdocs" \ + --azureAccountName "$AZURE_ACCOUNT_NAME" \ + --entity "$ENTITY_NAMESPACE/$ENTITY_KIND/$ENTITY_NAME" diff --git a/.github/dco.yml b/.github/dco.yml new file mode 100644 index 0000000..37e411e --- /dev/null +++ b/.github/dco.yml @@ -0,0 +1,2 @@ +require: + members: false \ No newline at end of file diff --git a/.github/workflows/deploy-and-test-cluster.yml b/.github/workflows/deploy-and-test-cluster.yml new file mode 100644 index 0000000..7353a60 --- /dev/null +++ b/.github/workflows/deploy-and-test-cluster.yml @@ -0,0 +1,31 @@ +name: Deploy and Test Cluster + +on: + push: + branches: [main] + paths: + - 'k8s/**' + pull_request: + branches: [main] + paths: + - 'k8s/**' + +jobs: + deploy-and-test-cluster: + runs-on: ubuntu-latest + steps: + - name: Check out the repository + uses: actions/checkout@v2 + + - name: Create k8s Kind Cluster + uses: helm/kind-action@v1 + + - name: Deploy application + run: | + kubectl apply -f k8s/ + + - name: Wait for Pods to be ready + run: | + kubectl wait --for=condition=ready pod -l app=demo-db --timeout=180s + kubectl wait --for=condition=ready pod -l app=petclinic --timeout=180s + diff --git a/.github/workflows/gradle-build.yml b/.github/workflows/gradle-build.yml new file mode 100644 index 0000000..c24c121 --- /dev/null +++ b/.github/workflows/gradle-build.yml @@ -0,0 +1,31 @@ +# This workflow will build a Java project with Gradle, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-gradle + +name: Java CI with Gradle + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + java: [ '17' ] + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK ${{matrix.java}} + uses: actions/setup-java@v4 + with: + java-version: ${{matrix.java}} + distribution: 'adopt' + cache: maven + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: Build with Gradle + run: ./gradlew build diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml new file mode 100644 index 0000000..a1ec4da --- /dev/null +++ b/.github/workflows/maven-build.yml @@ -0,0 +1,29 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + java: [ '17' ] + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK ${{matrix.java}} + uses: actions/setup-java@v4 + with: + java-version: ${{matrix.java}} + distribution: 'adopt' + cache: maven + - name: Build with Maven Wrapper + run: ./mvnw -B verify diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..76cb65f --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +HELP.md +pom.xml.bak +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.attach_pid* +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### CSS ### +_site/ +*.css +!petclinic.css diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 0000000..8b3bb72 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,9 @@ +image: + file: ./.devcontainer/Dockerfile +tasks: + - before: sudo usermod -a -G sdkman gitpod && sudo usermod -a -G nvm gitpod && sudo chown -R gitpod /usr/local/sdkman /usr/local/share/nvm + - init: ./mvnw install +vscode: + extensions: + - vscjava.vscode-java-pack + - redhat.vscode-xml \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..8dea6c2 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip diff --git a/.pages b/.pages new file mode 100644 index 0000000..7ef485f --- /dev/null +++ b/.pages @@ -0,0 +1,3 @@ +nav: + - docs + - ... diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..ff77379 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..02aa9fb --- /dev/null +++ b/README.md @@ -0,0 +1,174 @@ +# Spring PetClinic Sample Application [![Build Status](https://github.com/spring-projects/spring-petclinic/actions/workflows/maven-build.yml/badge.svg)](https://github.com/spring-projects/spring-petclinic/actions/workflows/maven-build.yml)[![Build Status](https://github.com/spring-projects/spring-petclinic/actions/workflows/gradle-build.yml/badge.svg)](https://github.com/spring-projects/spring-petclinic/actions/workflows/gradle-build.yml) + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/spring-projects/spring-petclinic) [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=7517918) + +## Understanding the Spring Petclinic application with a few diagrams + +See the presentation here: +[Spring Petclinic Sample Application (legacy slides)](https://speakerdeck.com/michaelisvy/spring-petclinic-sample-application?slide=20) + +> **Note:** These slides refer to a legacy, pre–Spring Boot version of Petclinic and may not reflect the current Spring Boot–based implementation. +> For up-to-date information, please refer to this repository and its documentation. + + +## Run Petclinic locally + +Spring Petclinic is a [Spring Boot](https://spring.io/guides/gs/spring-boot) application built using [Maven](https://spring.io/guides/gs/maven/) or [Gradle](https://spring.io/guides/gs/gradle/). +Java 17 or later is required for the build, and the application can run with Java 17 or newer. + +You first need to clone the project locally: + +```bash +git clone https://github.com/spring-projects/spring-petclinic.git +cd spring-petclinic +``` +If you are using Maven, you can start the application on the command-line as follows: + +```bash +./mvnw spring-boot:run +``` +With Gradle, the command is as follows: + +```bash +./gradlew bootRun +``` + +You can then access the Petclinic at . + +petclinic-screenshot + +You can, of course, run Petclinic in your favorite IDE. +See below for more details. + +## Building a Container + +There is no `Dockerfile` in this project. You can build a container image (if you have a docker daemon) using the Spring Boot build plugin: + +```bash +./mvnw spring-boot:build-image +``` + +## In case you find a bug/suggested improvement for Spring Petclinic + +Our issue tracker is available [here](https://github.com/spring-projects/spring-petclinic/issues). + +## Database configuration + +In its default configuration, Petclinic uses an in-memory database (H2) which +gets populated at startup with data. The h2 console is exposed at `http://localhost:8080/h2-console`, +and it is possible to inspect the content of the database using the `jdbc:h2:mem:` URL. The UUID is printed at startup to the console. + +A similar setup is provided for MySQL and PostgreSQL if a persistent database configuration is needed. Note that whenever the database type changes, the app needs to run with a different profile: `spring.profiles.active=mysql` for MySQL or `spring.profiles.active=postgres` for PostgreSQL. See the [Spring Boot documentation](https://docs.spring.io/spring-boot/how-to/properties-and-configuration.html#howto.properties-and-configuration.set-active-spring-profiles) for more detail on how to set the active profile. + +You can start MySQL or PostgreSQL locally with whatever installer works for your OS or use docker: + +```bash +docker run -e MYSQL_USER=petclinic -e MYSQL_PASSWORD=petclinic -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=petclinic -p 3306:3306 mysql:9.6 +``` + +or + +```bash +docker run -e POSTGRES_USER=petclinic -e POSTGRES_PASSWORD=petclinic -e POSTGRES_DB=petclinic -p 5432:5432 postgres:18.3 +``` + +Further documentation is provided for [MySQL](https://github.com/spring-projects/spring-petclinic/blob/main/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt) +and [PostgreSQL](https://github.com/spring-projects/spring-petclinic/blob/main/src/main/resources/db/postgres/petclinic_db_setup_postgres.txt). + +Instead of vanilla `docker` you can also use the provided `docker-compose.yml` file to start the database containers. Each one has a service named after the Spring profile: + +```bash +docker compose up mysql +``` + +or + +```bash +docker compose up postgres +``` + +## Test Applications + +At development time we recommend you use the test applications set up as `main()` methods in `PetClinicIntegrationTests` (using the default H2 database and also adding Spring Boot Devtools), `MySqlTestApplication` and `PostgresIntegrationTests`. These are set up so that you can run the apps in your IDE to get fast feedback and also run the same classes as integration tests against the respective database. The MySql integration tests use Testcontainers to start the database in a Docker container, and the Postgres tests use Docker Compose to do the same thing. + +## Compiling the CSS + +There is a `petclinic.css` in `src/main/resources/static/resources/css`. It was generated from the `petclinic.scss` source, combined with the [Bootstrap](https://getbootstrap.com/) library. If you make changes to the `scss`, or upgrade Bootstrap, you will need to re-compile the CSS resources using the Maven profile "css", i.e. `./mvnw package -P css`. There is no build profile for Gradle to compile the CSS. + +## Working with Petclinic in your IDE + +### Prerequisites + +The following items should be installed in your system: + +- Java 17 or newer (full JDK, not a JRE) +- [Git command line tool](https://help.github.com/articles/set-up-git) +- Your preferred IDE + - Eclipse with the m2e plugin. Note: when m2e is available, there is a m2 icon in `Help -> About` dialog. If m2e is + not there, follow the installation process [here](https://www.eclipse.org/m2e/) + - [Spring Tools Suite](https://spring.io/tools) (STS) + - [IntelliJ IDEA](https://www.jetbrains.com/idea/) + - [VS Code](https://code.visualstudio.com) + +### Steps + +1. On the command line run: + + ```bash + git clone https://github.com/spring-projects/spring-petclinic.git + ``` + +1. Inside Eclipse or STS: + + Open the project via `File -> Import -> Maven -> Existing Maven project`, then select the root directory of the cloned repo. + + Then either build on the command line `./mvnw generate-resources` or use the Eclipse launcher (right-click on project and `Run As -> Maven install`) to generate the CSS. Run the application's main method by right-clicking on it and choosing `Run As -> Java Application`. + +1. Inside IntelliJ IDEA: + + In the main menu, choose `File -> Open` and select the Petclinic [pom.xml](pom.xml). Click on the `Open` button. + + - CSS files are generated from the Maven build. You can build them on the command line `./mvnw generate-resources` or right-click on the `spring-petclinic` project then `Maven -> Generates sources and Update Folders`. + + - A run configuration named `PetClinicApplication` should have been created for you if you're using a recent Ultimate version. Otherwise, run the application by right-clicking on the `PetClinicApplication` main class and choosing `Run 'PetClinicApplication'`. + +1. Navigate to the Petclinic + + Visit [http://localhost:8080](http://localhost:8080) in your browser. + +## Looking for something in particular? + +|Spring Boot Configuration | Class or Java property files | +|--------------------------|---| +|The Main Class | [PetClinicApplication](https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/PetClinicApplication.java) | +|Properties Files | [application.properties](https://github.com/spring-projects/spring-petclinic/blob/main/src/main/resources) | +|Caching | [CacheConfiguration](https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/system/CacheConfiguration.java) | + +## Interesting Spring Petclinic branches and forks + +The Spring Petclinic "main" branch in the [spring-projects](https://github.com/spring-projects/spring-petclinic) +GitHub org is the "canonical" implementation based on Spring Boot and Thymeleaf. There are +[quite a few forks](https://spring-petclinic.github.io/docs/forks.html) in the GitHub org +[spring-petclinic](https://github.com/spring-petclinic). If you are interested in using a different technology stack to implement the Pet Clinic, please join the community there. + +## Interaction with other open-source projects + +One of the best parts about working on the Spring Petclinic application is that we have the opportunity to work in direct contact with many Open Source projects. We found bugs/suggested improvements on various topics such as Spring, Spring Data, Bean Validation and even Eclipse! In many cases, they've been fixed/implemented in just a few days. +Here is a list of them: + +| Name | Issue | +|------|-------| +| Spring JDBC: simplify usage of NamedParameterJdbcTemplate | [SPR-10256](https://github.com/spring-projects/spring-framework/issues/14889) and [SPR-10257](https://github.com/spring-projects/spring-framework/issues/14890) | +| Bean Validation / Hibernate Validator: simplify Maven dependencies and backward compatibility |[HV-790](https://hibernate.atlassian.net/browse/HV-790) and [HV-792](https://hibernate.atlassian.net/browse/HV-792) | +| Spring Data: provide more flexibility when working with JPQL queries | [DATAJPA-292](https://github.com/spring-projects/spring-data-jpa/issues/704) | + +## Contributing + +The [issue tracker](https://github.com/spring-projects/spring-petclinic/issues) is the preferred channel for bug reports, feature requests and submitting pull requests. + +For pull requests, editor preferences are available in the [editor config](.editorconfig) for easy use in common text editors. Read more and download plugins at . All commits must include a __Signed-off-by__ trailer at the end of each commit message to indicate that the contributor agrees to the Developer Certificate of Origin. +For additional details, please refer to the blog post [Hello DCO, Goodbye CLA: Simplifying Contributions to Spring](https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring). + +## License + +The Spring PetClinic sample application is released under version 2.0 of the [Apache License](https://www.apache.org/licenses/LICENSE-2.0). diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..e526fae --- /dev/null +++ b/build.gradle @@ -0,0 +1,93 @@ +plugins { + id 'java' + id 'checkstyle' + id 'org.springframework.boot' version '4.0.3' + id 'io.spring.dependency-management' version '1.1.7' + id 'org.graalvm.buildtools.native' version '0.11.5' + id 'org.cyclonedx.bom' version '3.2.0' + id 'io.spring.javaformat' version '0.0.47' + id "io.spring.nohttp" version "0.0.11" +} + +gradle.startParameter.excludedTaskNames += [ "checkFormatAot", "checkFormatAotTest" ] + +group = 'org.springframework.samples' +version = '4.0.0-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +repositories { + mavenCentral() +} + +ext.checkstyleVersion = "12.3.1" +ext.springJavaformatCheckstyleVersion = "0.0.47" +ext.webjarsLocatorLiteVersion = "1.1.3" +ext.webjarsFontawesomeVersion = "4.7.0" +ext.webjarsBootstrapVersion = "5.3.8" + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-cache' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.springframework.boot:spring-boot-starter-webmvc' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'javax.cache:cache-api' + implementation 'jakarta.xml.bind:jakarta.xml.bind-api' + runtimeOnly 'org.springframework.boot:spring-boot-starter-actuator' + runtimeOnly "org.webjars:webjars-locator-lite:${webjarsLocatorLiteVersion}" + runtimeOnly "org.webjars.npm:bootstrap:${webjarsBootstrapVersion}" + runtimeOnly "org.webjars.npm:font-awesome:${webjarsFontawesomeVersion}" + runtimeOnly 'com.github.ben-manes.caffeine:caffeine' + runtimeOnly 'com.h2database:h2' + runtimeOnly 'com.mysql:mysql-connector-j' + runtimeOnly 'org.postgresql:postgresql' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test' + testImplementation 'org.springframework.boot:spring-boot-starter-restclient-test' + testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test' + testImplementation 'org.springframework.boot:spring-boot-testcontainers' + testImplementation 'org.springframework.boot:spring-boot-docker-compose' + testImplementation 'org.testcontainers:testcontainers-junit-jupiter' + testImplementation 'org.testcontainers:testcontainers-mysql' + checkstyle "io.spring.javaformat:spring-javaformat-checkstyle:${springJavaformatCheckstyleVersion}" + checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}" +} + +tasks.named('test') { + useJUnitPlatform() +} + +tasks.named("cyclonedxDirectBom").configure { + dependsOn("compileJava") + skipConfigs = [".*[Tt]est.*"] +} + +checkstyle { + configDirectory = project.file('src/checkstyle') + configFile = file('src/checkstyle/nohttp-checkstyle.xml') +} + +checkstyleNohttp { + configDirectory = project.file('src/checkstyle') + configFile = file('src/checkstyle/nohttp-checkstyle.xml') +} + +tasks.named("formatMain").configure { dependsOn("checkstyleMain") } +tasks.named("formatMain").configure { dependsOn("checkstyleNohttp") } + +tasks.named("formatTest").configure { dependsOn("checkstyleTest") } +tasks.named("formatTest").configure { dependsOn("checkstyleNohttp") } + +checkstyleAot.enabled = false +checkstyleAotTest.enabled = false + +checkFormatAot.enabled = false +checkFormatAotTest.enabled = false + +formatAot.enabled = false +formatAotTest.enabled = false \ No newline at end of file diff --git a/catalog-info.yaml b/catalog-info.yaml new file mode 100644 index 0000000..e5f78e2 --- /dev/null +++ b/catalog-info.yaml @@ -0,0 +1,137 @@ +# ─── System: groups all per-service Components for this application ─── +apiVersion: backstage.io/v1alpha1 +kind: System +metadata: + name: petclinic-demo-andrej-doc + description: "petclinic-demo-andrej-doc — deployed via ArgoCD into demo-apps" + labels: + backstage.io/environment: "dev" + app.kubernetes.io/managed-by: "backstage" + tags: + - deployment + - argocd + + - opentelemetry + + annotations: + argocd/app-name: "petclinic-demo-andrej-doc" + argocd/app-namespace: "argocd" + argocd/instance-name: "" + backstage.io/techdocs-ref: dir:. + backstage.io/source-location: "url:https://gitea.kyndemo.live/validate/petclinic-demo-andrej-doc/src/branch/main" + backstage.io/kubernetes-namespace: "demo-apps" + backstage.io/kubernetes-label-selector: "app.kubernetes.io/managed-by=backstage" + gitea.kyndemo.live/repo-slug: "validate/petclinic-demo-andrej-doc" + sonarqube.org/project-key: petclinic-demo-andrej-doc + + grafana/grafana-instance: "default" + grafana/alert-label-selector: "app=petclinic-demo-andrej-doc" + grafana/dashboard-selector: "uid == 'otel-app-observability-v2'" + grafana.com/alert-label-selector: "app=petclinic-demo-andrej-doc" + grafana.com/dashboard-url: "https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=petclinic-demo-andrej-doc" + + links: + - url: https://petclinic-demo-andrej-doc.kyndemo.live + title: Live Application + icon: web + - url: https://gitea.kyndemo.live/validate/petclinic-demo-andrej-doc + title: Repository + icon: github + - url: https://argocd.kyndemo.live/applications/petclinic-demo-andrej-doc + title: ArgoCD App + icon: dashboard + + - url: https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=petclinic-demo-andrej-doc + title: Grafana Dashboard + icon: dashboard + +spec: + owner: "platform-engineering" + domain: platform + dependsOn: + - component:default/argocd-service + + + - resource:default/otel-collector + - resource:default/otel-operator + + - resource:default/k6-operator + +# ─── Primary Component (always present, matches component_id) ─────── +--- +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: petclinic-demo-andrej-doc + description: "petclinic-demo-andrej-doc — deployed via ArgoCD into demo-apps" + labels: + backstage.io/environment: "dev" + app.kubernetes.io/managed-by: "backstage" + tags: + - deployment + - argocd + + - opentelemetry + + - load-testing + - k6 + + - chaos-engineering + - chaos-mesh + + + annotations: + argocd/app-name: "petclinic-demo-andrej-doc" + argocd/app-namespace: "argocd" + argocd/instance-name: "" + backstage.io/techdocs-ref: dir:. + backstage.io/source-location: "url:https://gitea.kyndemo.live/validate/petclinic-demo-andrej-doc/src/branch/main" + backstage.io/kubernetes-namespace: "demo-apps" + backstage.io/kubernetes-label-selector: "app=petclinic-demo-andrej-doc" + gitea.kyndemo.live/repo-slug: "validate/petclinic-demo-andrej-doc" + sonarqube.org/project-key: petclinic-demo-andrej-doc + + grafana/grafana-instance: "default" + grafana/alert-label-selector: "app=petclinic-demo-andrej-doc" + grafana/dashboard-selector: "uid == 'otel-app-observability-v2'" + grafana.com/alert-label-selector: "app=petclinic-demo-andrej-doc" + grafana.com/dashboard-url: "https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=petclinic-demo-andrej-doc" + + k6/enabled: "true" + k6/test-configmap: "k6-test-petclinic-demo-andrej-doc" + k6/test-namespace: "demo-apps" + k6/target-service: "frontend" + + chaos-mesh/enabled: "true" + + links: + - url: https://petclinic-demo-andrej-doc.kyndemo.live + title: Live Application + icon: web + - url: https://gitea.kyndemo.live/validate/petclinic-demo-andrej-doc + title: Repository + icon: github + - url: https://argocd.kyndemo.live/applications/petclinic-demo-andrej-doc + title: ArgoCD App + icon: dashboard + + - url: https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=petclinic-demo-andrej-doc + title: Grafana Dashboard + icon: dashboard + +spec: + type: service + owner: "platform-engineering" + lifecycle: experimental + + system: petclinic-demo-andrej-doc + dependsOn: + - component:default/argocd-service + + + - resource:default/otel-collector + + - resource:default/k6-operator + +# ─── Per-service Components (from Watcher discovery) ───────────────── + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a605753 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +services: + mysql: + image: mysql:9.6 + ports: + - "3306:3306" + environment: + - MYSQL_ROOT_PASSWORD= + - MYSQL_ALLOW_EMPTY_PASSWORD=true + - MYSQL_USER=petclinic + - MYSQL_PASSWORD=petclinic + - MYSQL_DATABASE=petclinic + volumes: + - "./conf.d:/etc/mysql/conf.d:ro" + postgres: + image: postgres:18.3 + ports: + - "5432:5432" + environment: + - POSTGRES_PASSWORD=petclinic + - POSTGRES_USER=petclinic + - POSTGRES_DB=petclinic diff --git a/docs/.pages b/docs/.pages new file mode 100644 index 0000000..ac50c0e --- /dev/null +++ b/docs/.pages @@ -0,0 +1,4 @@ +nav: + - Home: index.md + - Runbooks: runbooks + - Architecture Decisions: adr diff --git a/docs/adr/.pages b/docs/adr/.pages new file mode 100644 index 0000000..ca92402 --- /dev/null +++ b/docs/adr/.pages @@ -0,0 +1,4 @@ +title: Architecture Decisions +nav: + - index.md + - ... diff --git a/docs/adr/index.md b/docs/adr/index.md new file mode 100644 index 0000000..2845289 --- /dev/null +++ b/docs/adr/index.md @@ -0,0 +1,61 @@ +# Architecture Decision Records + +This directory tracks Architecture Decision Records (ADRs) for **petclinic-demo-andrej-doc**. + +ADRs capture the context, trade-offs, and consequences of significant technical choices. They are lightweight documents — typically one to two pages — following the [MADR format](https://adr.github.io/madr/). + +## Why ADRs? + +- **Preserve context**: Future engineers understand *why* a decision was made, not just what was decided. +- **Reduce re-litigation**: A documented decision stops teams re-debating the same trade-offs every quarter. +- **Accelerate onboarding**: New team members read ADRs to understand the service's evolution without archaeology. + +## Index + +| # | Title | Status | Date | +|---|-------|--------|------| +| *(add entries here as ADRs are created)* | | | | + +## Creating a new ADR + +1. Copy the template below into `docs/adr/NNNN-.md` where `NNNN` is the next sequential number. +2. Fill in every section — even if the answer is "not applicable, because...". +3. Open a pull request so the team can review the decision **before** it is finalized. +4. Update the index table above once the ADR is accepted. + +--- + +## ADR Template + +``` +# NNNN. + +Date: YYYY-MM-DD +Status: Proposed | Accepted | Deprecated | Superseded by [NNNN](NNNN-.md) + +## Context and problem statement + +Describe the problem or question that drove this decision. + +## Decision drivers + +- Driver 1 +- Driver 2 + +## Considered options + +- **Option A** — brief description +- **Option B** — brief description + +## Decision outcome + +Chosen option: **Option X**, because ... + +### Positive consequences + +- ... + +### Negative consequences + +- ... +``` diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..1886c43 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,81 @@ +# petclinic-demo-andrej-doc + +Deployed from **https://github.com/spring-projects/spring-petclinic** via the Backstage Hello Demo template. + +| Property | Value | +|---|---| +| **Environment** | `dev` | +| **Namespace** | `demo-apps` | +| **ArgoCD Project** | `` | +| **Branch** | `main` | +| **Observability** | Enabled (OpenTelemetry) | + +## Quick Links + +- **Repository**: [https://gitea.kyndemo.live/validate/petclinic-demo-andrej-doc](https://gitea.kyndemo.live/validate/petclinic-demo-andrej-doc) +- **ArgoCD**: [https://argocd.kyndemo.live/applications/petclinic-demo-andrej-doc](https://argocd.kyndemo.live/applications/petclinic-demo-andrej-doc) +- **Live App**: [https://petclinic-demo-andrej-doc.kyndemo.live](https://petclinic-demo-andrej-doc.kyndemo.live) + +- **Grafana Dashboard**: [https://grafana.kyndemo.live/d/otel-app-observability-v2/...?var-app=petclinic-demo-andrej-doc](https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=petclinic-demo-andrej-doc) + + +## Architecture + +This service was scaffolded using the **Application Migration Factory** Backstage template. + +**Deployment flow:** + +1. Source cloned from `https://github.com/spring-projects/spring-petclinic` +2. Catalog entity and CI workflows overlaid by Backstage + +3. The Watcher scanned the repository and injected OpenTelemetry auto-instrumentation via Kustomize overlay + +4. ArgoCD Application created targeting the `demo-apps` namespace +5. ArgoCD continuously syncs from the `main` branch + +**ArgoCD sync path:** `overlays/otel` + +## Development Workflow + +```bash +git clone https://gitea.kyndemo.live/validate/petclinic-demo-andrej-doc.git +cd petclinic-demo-andrej-doc +# make changes, then: +git add . && git commit -m "your change" && git push origin main +``` + +ArgoCD monitors the repository and automatically syncs changes to the `demo-apps` namespace. + +## Rollback + +To roll back to a previous version: + +1. Open the [ArgoCD UI](https://argocd.kyndemo.live/applications/petclinic-demo-andrej-doc) +2. Click **History and Rollback** +3. Select the desired revision and click **Rollback** + +Alternatively, revert the commit in Git and push — ArgoCD will auto-sync the rollback. + + +## Observability + +This service has OpenTelemetry auto-instrumentation enabled. Traces, metrics, and logs are exported to the OTel Collector and visualised in Grafana. + +**Viewing telemetry:** + +- Open the [Grafana Dashboard](https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=petclinic-demo-andrej-doc) +- Filter by `app=petclinic-demo-andrej-doc` to see service-specific data +- Check the **Alerts** tab in Backstage for any firing Grafana alerts + +**OTel Collector endpoint:** `http://otel-collector.monitoring.svc.cluster.local:4318` + + +## SLOs and Monitoring + +Define your service level objectives here once the service is stable: + +| SLI | Target | Dashboard | +|---|---|---| +| Availability | 99.9% | [Grafana](https://grafana.kyndemo.live) | +| Latency (p99) | < 500ms | [Grafana](https://grafana.kyndemo.live) | +| Error rate | < 1% | [Grafana](https://grafana.kyndemo.live) | diff --git a/docs/runbooks/.pages b/docs/runbooks/.pages new file mode 100644 index 0000000..ce80cfe --- /dev/null +++ b/docs/runbooks/.pages @@ -0,0 +1,4 @@ +title: Runbooks +nav: + - index.md + - ... diff --git a/docs/runbooks/index.md b/docs/runbooks/index.md new file mode 100644 index 0000000..6f41283 --- /dev/null +++ b/docs/runbooks/index.md @@ -0,0 +1,55 @@ +# Runbooks + +Operational runbooks for **petclinic-demo-andrej-doc**. + +Each runbook documents a specific procedure — incident response, rollback steps, scaling operations, or routine maintenance — so that on-call engineers can resolve issues safely and quickly without deep system knowledge. + +## How to use these runbooks + +1. **Identify the scenario** — check the index below or use the search bar at the top of the page. +2. **Follow each step exactly** — runbooks are written to be safe to execute under pressure. +3. **Record deviations** — if you had to improvise, open a pull request to update the runbook so the next engineer benefits. + +## Index + +| Runbook | Trigger / Alert | Severity | +|---------|-----------------|----------| +| *(add runbooks below)* | | | + +## Creating a new runbook + +Add a file `docs/runbooks/<scenario-name>.md` using this template: + +``` +# Runbook: <Scenario Name> + +**Severity:** P1 / P2 / P3 +**Trigger:** <What symptom or alert brings an engineer here> +**Owner:** <Team name> +**Last tested:** YYYY-MM-DD + +--- + +## Prerequisites + +- Access to ... +- Permissions for ... + +## Steps + +1. Confirm the symptom by checking ... +2. ... +3. ... + +## Verification + +After completing the steps, verify the issue is resolved by ... + +## Escalation + +If this runbook does not resolve the issue within _N_ minutes, escalate to ... + +## Post-incident + +Open a post-mortem ticket and link it here. +``` diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..f8e1ee3 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..23449a2 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..adff685 --- /dev/null +++ b/gradlew @@ -0,0 +1,248 @@ +#!/bin/sh + +# +# Copyright © 2015 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..e509b2d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,93 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/k8s/db.yml b/k8s/db.yml new file mode 100644 index 0000000..e26088f --- /dev/null +++ b/k8s/db.yml @@ -0,0 +1,73 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: demo-db +type: servicebinding.io/postgresql +stringData: + type: "postgresql" + provider: "postgresql" + host: "demo-db" + port: "5432" + database: "petclinic" + username: "user" + password: "pass" + +--- +apiVersion: v1 +kind: Service +metadata: + name: demo-db +spec: + ports: + - port: 5432 + selector: + app: demo-db + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: demo-db + labels: + app: demo-db +spec: + selector: + matchLabels: + app: demo-db + template: + metadata: + labels: + app: demo-db + spec: + containers: + - image: postgres:18.3 + name: postgresql + env: + - name: POSTGRES_USER + valueFrom: + secretKeyRef: + name: demo-db + key: username + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: demo-db + key: password + - name: POSTGRES_DB + valueFrom: + secretKeyRef: + name: demo-db + key: database + ports: + - containerPort: 5432 + name: postgresql + livenessProbe: + tcpSocket: + port: postgresql + readinessProbe: + tcpSocket: + port: postgresql + startupProbe: + tcpSocket: + port: postgresql diff --git a/k8s/petclinic.yml b/k8s/petclinic.yml new file mode 100644 index 0000000..a5677cd --- /dev/null +++ b/k8s/petclinic.yml @@ -0,0 +1,64 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: petclinic +spec: + type: NodePort + ports: + - port: 80 + targetPort: 8080 + selector: + app: petclinic + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: petclinic + labels: + app: petclinic +spec: + replicas: 1 + selector: + matchLabels: + app: petclinic + template: + metadata: + labels: + app: petclinic + spec: + containers: + - name: workload + image: dsyer/petclinic + env: + - name: SPRING_PROFILES_ACTIVE + value: postgres + - name: SERVICE_BINDING_ROOT + value: /bindings + - name: SPRING_APPLICATION_JSON + value: | + { + "management.endpoint.health.probes.add-additional-paths": true + } + ports: + - name: http + containerPort: 8080 + livenessProbe: + httpGet: + path: /livez + port: http + readinessProbe: + httpGet: + path: /readyz + port: http + volumeMounts: + - mountPath: /bindings/secret + name: binding + readOnly: true + volumes: + - name: binding + projected: + sources: + - secret: + name: demo-db diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..9e15009 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,18 @@ +site_name: petclinic-demo-andrej-doc +site_description: https://github.com/spring-projects/spring-petclinic deployed via ArgoCD +docs_dir: docs +exclude_docs: | + node_modules/ + vendor/ + .git/ + build/ + dist/ + site/ + __pycache__/ + *.tar.gz + *.jar + *.zip + +plugins: + - techdocs-core + - awesome-pages diff --git a/mvnw b/mvnw new file mode 100755 index 0000000..33c353f --- /dev/null +++ b/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash> +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..798ba16 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash> +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/overlays/deploy/kustomization.yaml b/overlays/deploy/kustomization.yaml new file mode 100644 index 0000000..4a4ce67 --- /dev/null +++ b/overlays/deploy/kustomization.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + + - ../../k8s + + - k6-configmap.yaml + + - ../ingress + + diff --git a/overlays/ingress/ingress.yaml b/overlays/ingress/ingress.yaml new file mode 100644 index 0000000..8c3990a --- /dev/null +++ b/overlays/ingress/ingress.yaml @@ -0,0 +1,26 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: petclinic-demo-andrej-doc + namespace: demo-apps + annotations: + kubernetes.io/ingress.class: nginx + cert-manager.io/cluster-issuer: letsencrypt-prod +spec: + ingressClassName: nginx + tls: + - hosts: + - petclinic-demo-andrej-doc.kyndemo.live + secretName: petclinic-demo-andrej-doc-kyndemo-live-tls + rules: + - host: petclinic-demo-andrej-doc.kyndemo.live + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: frontend + port: + number: 80 diff --git a/overlays/ingress/kustomization.yaml b/overlays/ingress/kustomization.yaml new file mode 100644 index 0000000..fb80823 --- /dev/null +++ b/overlays/ingress/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - ingress.yaml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..36251b4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-parent</artifactId> + <version>4.0.3</version> + </parent> + + <groupId>org.springframework.samples</groupId> + <artifactId>spring-petclinic</artifactId> + <version>4.0.0-SNAPSHOT</version> + + <name>petclinic</name> + + <properties> + <!-- Generic properties --> + <java.version>17</java.version> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <!-- Important for reproducible builds. Update using e.g. ./mvnw versions:set -DnewVersion=... --> + <project.build.outputTimestamp>2024-11-28T14:37:52Z</project.build.outputTimestamp> + + <!-- Web dependencies --> + <webjars-locator.version>1.1.3</webjars-locator.version> + <webjars-bootstrap.version>5.3.8</webjars-bootstrap.version> + <webjars-font-awesome.version>4.7.0</webjars-font-awesome.version> + + <!-- Checkstyle needs to stay on v12 since v13 sets minimal jdk to 21 - https://checkstyle.org/releasenotes.html#Release_13.0.0 --> + <checkstyle.version>12.3.1</checkstyle.version> + <jacoco.version>0.8.14</jacoco.version> + <libsass.version>0.3.4</libsass.version> + <lifecycle-mapping>1.0.0</lifecycle-mapping> + <maven-checkstyle.version>3.6.0</maven-checkstyle.version> + <nohttp-checkstyle.version>0.0.11</nohttp-checkstyle.version> + <spring-format.version>0.0.47</spring-format.version> + </properties> + + <dependencies> + <!-- Spring and Spring Boot dependencies --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-cache</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-thymeleaf</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-webmvc</artifactId> + </dependency> + + <dependency> + <groupId>javax.cache</groupId> + <artifactId>cache-api</artifactId> + </dependency> + <dependency> + <groupId>jakarta.xml.bind</groupId> + <artifactId>jakarta.xml.bind-api</artifactId> + </dependency> + + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>com.github.ben-manes.caffeine</groupId> + <artifactId>caffeine</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>com.mysql</groupId> + <artifactId>mysql-connector-j</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.webjars</groupId> + <artifactId>webjars-locator-lite</artifactId> + <version>${webjars-locator.version}</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.webjars.npm</groupId> + <artifactId>bootstrap</artifactId> + <version>${webjars-bootstrap.version}</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.webjars.npm</groupId> + <artifactId>font-awesome</artifactId> + <version>${webjars-font-awesome.version}</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-devtools</artifactId> + <optional>true</optional> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-restclient</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-restclient-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-webmvc-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-testcontainers</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-docker-compose</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>testcontainers-junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>testcontainers-mysql</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + <executions> + <execution> + <id>enforce-java</id> + <goals> + <goal>enforce</goal> + </goals> + <configuration> + <rules> + <requireJavaVersion> + <message>This build requires at least Java ${java.version}, update your JVM, and run the build again</message> + <version>${java.version}</version> + </requireJavaVersion> + </rules> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>io.spring.javaformat</groupId> + <artifactId>spring-javaformat-maven-plugin</artifactId> + <version>${spring-format.version}</version> + <executions> + <execution> + <goals> + <goal>validate</goal> + </goals> + <phase>validate</phase> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + <version>${maven-checkstyle.version}</version> + <dependencies> + <dependency> + <groupId>com.puppycrawl.tools</groupId> + <artifactId>checkstyle</artifactId> + <version>${checkstyle.version}</version> + </dependency> + <dependency> + <groupId>io.spring.nohttp</groupId> + <artifactId>nohttp-checkstyle</artifactId> + <version>${nohttp-checkstyle.version}</version> + </dependency> + </dependencies> + <executions> + <execution> + <id>nohttp-checkstyle-validation</id> + <goals> + <goal>check</goal> + </goals> + <phase>validate</phase> + <configuration> + <configLocation>src/checkstyle/nohttp-checkstyle.xml</configLocation> + <sourceDirectories>${basedir}</sourceDirectories> + <includes>**/*</includes> + <excludes>**/.git/**/*,**/.idea/**/*,**/target/**/,**/.flattened-pom.xml,**/*.class</excludes> + <propertyExpansion>config_loc=${basedir}/src/checkstyle/</propertyExpansion> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.graalvm.buildtools</groupId> + <artifactId>native-maven-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <executions> + <execution> + <!-- Spring Boot Actuator displays build-related information + if a META-INF/build-info.properties file is present --> + <goals> + <goal>build-info</goal> + </goals> + <configuration> + <additionalProperties> + <encoding.source>${project.build.sourceEncoding}</encoding.source> + <encoding.reporting>${project.reporting.outputEncoding}</encoding.reporting> + <java.source>${java.version}</java.source> + <java.target>${java.version}</java.target> + </additionalProperties> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>${jacoco.version}</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>report</id> + <goals> + <goal>report</goal> + </goals> + <phase>prepare-package</phase> + </execution> + </executions> + </plugin> + + <!-- Spring Boot Actuator displays build-related information if a git.properties file is + present at the classpath --> + <plugin> + <groupId>io.github.git-commit-id</groupId> + <artifactId>git-commit-id-maven-plugin</artifactId> + <configuration> + <failOnNoGitDirectory>false</failOnNoGitDirectory> + <failOnUnableToExtractRepoInfo>false</failOnUnableToExtractRepoInfo> + </configuration> + </plugin> + <!-- Spring Boot Actuator displays sbom-related information if a CycloneDX SBOM file is + present at the classpath --> + <plugin> + <?m2e ignore?> + <groupId>org.cyclonedx</groupId> + <artifactId>cyclonedx-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + <licenses> + <license> + <name>Apache License, Version 2.0</name> + <url>https://www.apache.org/licenses/LICENSE-2.0</url> + </license> + </licenses> + + <profiles> + <profile> + <id>css</id> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>unpack</id> + <goals> + <goal>unpack</goal> + </goals> + <?m2e execute onConfiguration,onIncremental?> + <phase>generate-resources</phase> + <configuration> + <artifactItems> + <artifactItem> + <groupId>org.webjars.npm</groupId> + <artifactId>bootstrap</artifactId> + <version>${webjars-bootstrap.version}</version> + </artifactItem> + </artifactItems> + <outputDirectory>${project.build.directory}/webjars</outputDirectory> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>com.gitlab.haynes</groupId> + <artifactId>libsass-maven-plugin</artifactId> + <version>${libsass.version}</version> + <configuration> + <inputPath>${basedir}/src/main/scss/</inputPath> + <outputPath>${basedir}/src/main/resources/static/resources/css/</outputPath> + <includePath>${project.build.directory}/webjars/META-INF/resources/webjars/bootstrap/${webjars-bootstrap.version}/scss/</includePath> + </configuration> + <executions> + <execution> + <?m2e execute onConfiguration,onIncremental?> + <goals> + <goal>compile</goal> + </goals> + <phase>generate-resources</phase> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>m2e</id> + <activation> + <property> + <name>m2e.version</name> + </property> + </activation> + <build> + <pluginManagement> + <plugins> + <!-- This plugin's configuration is used to store Eclipse m2e settings + only. It has no influence on the Maven build itself. --> + <plugin> + <groupId>org.eclipse.m2e</groupId> + <artifactId>lifecycle-mapping</artifactId> + <version>${lifecycle-mapping}</version> + <configuration> + <lifecycleMappingMetadata> + <pluginExecutions> + <pluginExecution> + <pluginExecutionFilter> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + <versionRange>[1,)</versionRange> + <goals> + <goal>check</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore></ignore> + </action> + </pluginExecution> + <pluginExecution> + <pluginExecutionFilter> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <versionRange>[1,)</versionRange> + <goals> + <goal>build-info</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore></ignore> + </action> + </pluginExecution> + <pluginExecution> + <pluginExecutionFilter> + <groupId>io.spring.javaformat</groupId> + <artifactId>spring-javaformat-maven-plugin</artifactId> + <versionRange>[0,)</versionRange> + <goals> + <goal>validate</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore></ignore> + </action> + </pluginExecution> + </pluginExecutions> + </lifecycleMappingMetadata> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> + </profile> + </profiles> +</project> diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..e60ee14 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'spring-petclinic' diff --git a/src/checkstyle/nohttp-checkstyle-suppressions.xml b/src/checkstyle/nohttp-checkstyle-suppressions.xml new file mode 100644 index 0000000..f475471 --- /dev/null +++ b/src/checkstyle/nohttp-checkstyle-suppressions.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<!DOCTYPE suppressions PUBLIC + "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN" + "https://checkstyle.org/dtds/suppressions_1_2.dtd"> +<suppressions> + <!-- Upstream defaults --> + <suppress files="node_modules[\\/].*" checks=".*"/> + <suppress files="node[\\/].*" checks=".*"/> + <suppress files="build[\\/].*" checks=".*"/> + <suppress files="target[\\/].*" checks=".*"/> + <suppress files=".+\.(jar|git|ico|p12|gif|jks|jpg|svg|log)" checks="NoHttp"/> + + <!-- Platform-scaffolded paths that use internal Kubernetes service URLs (http only) --> + <suppress files="k6[\\/].*" checks="NoHttp"/> + <suppress files="overlays[\\/].*" checks="NoHttp"/> + <suppress files="docs[\\/].*" checks="NoHttp"/> + <suppress files="config[\\/].*" checks="NoHttp"/> +</suppressions> diff --git a/src/checkstyle/nohttp-checkstyle.xml b/src/checkstyle/nohttp-checkstyle.xml new file mode 100644 index 0000000..f886411 --- /dev/null +++ b/src/checkstyle/nohttp-checkstyle.xml @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<!DOCTYPE module PUBLIC + "-//Puppy Crawl//DTD Check Configuration 1.2//EN" + "https://checkstyle.org/dtds/configuration_1_2.dtd"> +<module name="com.puppycrawl.tools.checkstyle.Checker"> + <module name="io.spring.nohttp.checkstyle.check.NoHttpCheck"/> + <module name="SuppressionFilter"> + <property name="file" value="${config_loc}/nohttp-checkstyle-suppressions.xml"/> + </module> +</module> diff --git a/src/main/java/org/springframework/samples/petclinic/PetClinicApplication.java b/src/main/java/org/springframework/samples/petclinic/PetClinicApplication.java new file mode 100644 index 0000000..fa06309 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/PetClinicApplication.java @@ -0,0 +1,36 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ImportRuntimeHints; + +/** + * PetClinic Spring Boot Application. + * + * @author Dave Syer + */ +@SpringBootApplication +@ImportRuntimeHints(PetClinicRuntimeHints.class) +public class PetClinicApplication { + + public static void main(String[] args) { + SpringApplication.run(PetClinicApplication.class, args); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/PetClinicRuntimeHints.java b/src/main/java/org/springframework/samples/petclinic/PetClinicRuntimeHints.java new file mode 100644 index 0000000..4999f4c --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/PetClinicRuntimeHints.java @@ -0,0 +1,37 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic; + +import org.springframework.aot.hint.RuntimeHints; +import org.springframework.aot.hint.RuntimeHintsRegistrar; +import org.springframework.samples.petclinic.model.BaseEntity; +import org.springframework.samples.petclinic.model.Person; +import org.springframework.samples.petclinic.vet.Vet; + +public class PetClinicRuntimeHints implements RuntimeHintsRegistrar { + + @Override + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + hints.resources().registerPattern("db/*"); // https://github.com/spring-projects/spring-boot/issues/32654 + hints.resources().registerPattern("messages/*"); + hints.resources().registerPattern("mysql-default-conf"); + hints.serialization().registerType(BaseEntity.class); + hints.serialization().registerType(Person.class); + hints.serialization().registerType(Vet.class); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/model/BaseEntity.java b/src/main/java/org/springframework/samples/petclinic/model/BaseEntity.java new file mode 100644 index 0000000..6babed5 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/model/BaseEntity.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.model; + +import java.io.Serializable; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.MappedSuperclass; + +/** + * Simple JavaBean domain object with an id property. Used as a base class for objects + * needing this property. + * + * @author Ken Krebs + * @author Juergen Hoeller + */ +@MappedSuperclass +public class BaseEntity implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public boolean isNew() { + return this.id == null; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/model/NamedEntity.java b/src/main/java/org/springframework/samples/petclinic/model/NamedEntity.java new file mode 100644 index 0000000..8eec021 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/model/NamedEntity.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.model; + +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import jakarta.validation.constraints.NotBlank; + +/** + * Simple JavaBean domain object adds a name property to <code>BaseEntity</code>. Used as + * a base class for objects needing these properties. + * + * @author Ken Krebs + * @author Juergen Hoeller + * @author Wick Dynex + */ +@MappedSuperclass +public class NamedEntity extends BaseEntity { + + @Column + @NotBlank + private String name; + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + String name = this.getName(); + return name != null ? name : "<null>"; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/model/Person.java b/src/main/java/org/springframework/samples/petclinic/model/Person.java new file mode 100644 index 0000000..30b5829 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/model/Person.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.model; + +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import jakarta.validation.constraints.NotBlank; + +/** + * Simple JavaBean domain object representing an person. + * + * @author Ken Krebs + */ +@MappedSuperclass +public class Person extends BaseEntity { + + @Column + @NotBlank + private String firstName; + + @Column + @NotBlank + private String lastName; + + public String getFirstName() { + return this.firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return this.lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/model/package-info.java b/src/main/java/org/springframework/samples/petclinic/model/package-info.java new file mode 100644 index 0000000..e8982c3 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/model/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * The classes in this package represent utilities used by the domain. + */ +package org.springframework.samples.petclinic.model; diff --git a/src/main/java/org/springframework/samples/petclinic/owner/Owner.java b/src/main/java/org/springframework/samples/petclinic/owner/Owner.java new file mode 100644 index 0000000..480a7a6 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/Owner.java @@ -0,0 +1,176 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import org.springframework.core.style.ToStringCreator; +import org.springframework.samples.petclinic.model.Person; +import org.springframework.util.Assert; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OrderBy; +import jakarta.persistence.Table; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.NotBlank; + +/** + * Simple JavaBean domain object representing an owner. + * + * @author Ken Krebs + * @author Juergen Hoeller + * @author Sam Brannen + * @author Michael Isvy + * @author Oliver Drotbohm + * @author Wick Dynex + */ +@Entity +@Table(name = "owners") +public class Owner extends Person { + + @Column + @NotBlank + private String address; + + @Column + @NotBlank + private String city; + + @Column + @NotBlank + @Pattern(regexp = "\\d{10}", message = "{telephone.invalid}") + private String telephone; + + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "owner_id") + @OrderBy("name") + private final List<Pet> pets = new ArrayList<>(); + + public String getAddress() { + return this.address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getCity() { + return this.city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getTelephone() { + return this.telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public List<Pet> getPets() { + return this.pets; + } + + public void addPet(Pet pet) { + if (pet.isNew()) { + getPets().add(pet); + } + } + + /** + * Return the Pet with the given name, or null if none found for this Owner. + * @param name to test + * @return the Pet with the given name, or null if no such Pet exists for this Owner + */ + public Pet getPet(String name) { + return getPet(name, false); + } + + /** + * Return the Pet with the given id, or null if none found for this Owner. + * @param id to test + * @return the Pet with the given id, or null if no such Pet exists for this Owner + */ + public Pet getPet(Integer id) { + for (Pet pet : getPets()) { + if (!pet.isNew()) { + Integer compId = pet.getId(); + if (Objects.equals(compId, id)) { + return pet; + } + } + } + return null; + } + + /** + * Return the Pet with the given name, or null if none found for this Owner. + * @param name to test + * @param ignoreNew whether to ignore new pets (pets that are not saved yet) + * @return the Pet with the given name, or null if no such Pet exists for this Owner + */ + public Pet getPet(String name, boolean ignoreNew) { + for (Pet pet : getPets()) { + String compName = pet.getName(); + if (compName != null && compName.equalsIgnoreCase(name)) { + if (!ignoreNew || !pet.isNew()) { + return pet; + } + } + } + return null; + } + + @Override + public String toString() { + return new ToStringCreator(this).append("id", this.getId()) + .append("new", this.isNew()) + .append("lastName", this.getLastName()) + .append("firstName", this.getFirstName()) + .append("address", this.address) + .append("city", this.city) + .append("telephone", this.telephone) + .toString(); + } + + /** + * Adds the given {@link Visit} to the {@link Pet} with the given identifier. + * @param petId the identifier of the {@link Pet}, must not be {@literal null}. + * @param visit the visit to add, must not be {@literal null}. + */ + public void addVisit(Integer petId, Visit visit) { + + Assert.notNull(petId, "Pet identifier must not be null!"); + Assert.notNull(visit, "Visit must not be null!"); + + Pet pet = getPet(petId); + + Assert.notNull(pet, "Invalid Pet identifier!"); + + pet.addVisit(visit); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java new file mode 100644 index 0000000..70e60b8 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java @@ -0,0 +1,176 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + +import jakarta.validation.Valid; + +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +/** + * @author Juergen Hoeller + * @author Ken Krebs + * @author Arjen Poutsma + * @author Michael Isvy + * @author Wick Dynex + */ +@Controller +class OwnerController { + + private static final String VIEWS_OWNER_CREATE_OR_UPDATE_FORM = "owners/createOrUpdateOwnerForm"; + + private final OwnerRepository owners; + + public OwnerController(OwnerRepository owners) { + this.owners = owners; + } + + @InitBinder + public void setAllowedFields(WebDataBinder dataBinder) { + dataBinder.setDisallowedFields("id", "*.id"); + } + + @ModelAttribute("owner") + public Owner findOwner(@PathVariable(name = "ownerId", required = false) Integer ownerId) { + return ownerId == null ? new Owner() + : this.owners.findById(ownerId) + .orElseThrow(() -> new IllegalArgumentException("Owner not found with id: " + ownerId + + ". Please ensure the ID is correct " + "and the owner exists in the database.")); + } + + @GetMapping("/owners/new") + public String initCreationForm() { + return VIEWS_OWNER_CREATE_OR_UPDATE_FORM; + } + + @PostMapping("/owners/new") + public String processCreationForm(@Valid Owner owner, BindingResult result, RedirectAttributes redirectAttributes) { + if (result.hasErrors()) { + redirectAttributes.addFlashAttribute("error", "There was an error in creating the owner."); + return VIEWS_OWNER_CREATE_OR_UPDATE_FORM; + } + + this.owners.save(owner); + redirectAttributes.addFlashAttribute("message", "New Owner Created"); + return "redirect:/owners/" + owner.getId(); + } + + @GetMapping("/owners/find") + public String initFindForm() { + return "owners/findOwners"; + } + + @GetMapping("/owners") + public String processFindForm(@RequestParam(defaultValue = "1") int page, Owner owner, BindingResult result, + Model model) { + // allow parameterless GET request for /owners to return all records + String lastName = owner.getLastName(); + if (lastName == null) { + lastName = ""; // empty string signifies broadest possible search + } + + // find owners by last name + Page<Owner> ownersResults = findPaginatedForOwnersLastName(page, lastName); + if (ownersResults.isEmpty()) { + // no owners found + result.rejectValue("lastName", "notFound", "not found"); + return "owners/findOwners"; + } + + if (ownersResults.getTotalElements() == 1) { + // 1 owner found + owner = ownersResults.iterator().next(); + return "redirect:/owners/" + owner.getId(); + } + + // multiple owners found + return addPaginationModel(page, model, ownersResults); + } + + private String addPaginationModel(int page, Model model, Page<Owner> paginated) { + List<Owner> listOwners = paginated.getContent(); + model.addAttribute("currentPage", page); + model.addAttribute("totalPages", paginated.getTotalPages()); + model.addAttribute("totalItems", paginated.getTotalElements()); + model.addAttribute("listOwners", listOwners); + return "owners/ownersList"; + } + + private Page<Owner> findPaginatedForOwnersLastName(int page, String lastname) { + int pageSize = 5; + Pageable pageable = PageRequest.of(page - 1, pageSize); + return owners.findByLastNameStartingWith(lastname, pageable); + } + + @GetMapping("/owners/{ownerId}/edit") + public String initUpdateOwnerForm() { + return VIEWS_OWNER_CREATE_OR_UPDATE_FORM; + } + + @PostMapping("/owners/{ownerId}/edit") + public String processUpdateOwnerForm(@Valid Owner owner, BindingResult result, @PathVariable("ownerId") int ownerId, + RedirectAttributes redirectAttributes) { + if (result.hasErrors()) { + redirectAttributes.addFlashAttribute("error", "There was an error in updating the owner."); + return VIEWS_OWNER_CREATE_OR_UPDATE_FORM; + } + + if (!Objects.equals(owner.getId(), ownerId)) { + result.rejectValue("id", "mismatch", "The owner ID in the form does not match the URL."); + redirectAttributes.addFlashAttribute("error", "Owner ID mismatch. Please try again."); + return "redirect:/owners/{ownerId}/edit"; + } + + owner.setId(ownerId); + this.owners.save(owner); + redirectAttributes.addFlashAttribute("message", "Owner Values Updated"); + return "redirect:/owners/{ownerId}"; + } + + /** + * Custom handler for displaying an owner. + * @param ownerId the ID of the owner to display + * @return a ModelMap with the model attributes for the view + */ + @GetMapping("/owners/{ownerId}") + public ModelAndView showOwner(@PathVariable("ownerId") int ownerId) { + ModelAndView mav = new ModelAndView("owners/ownerDetails"); + Optional<Owner> optionalOwner = this.owners.findById(ownerId); + Owner owner = optionalOwner.orElseThrow(() -> new IllegalArgumentException( + "Owner not found with id: " + ownerId + ". Please ensure the ID is correct ")); + mav.addObject(owner); + return mav; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java b/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java new file mode 100644 index 0000000..d2b3dde --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java @@ -0,0 +1,62 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +/** + * Repository class for <code>Owner</code> domain objects. All method names are compliant + * with Spring Data naming conventions so this interface can easily be extended for Spring + * Data. See: + * https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation + * + * @author Ken Krebs + * @author Juergen Hoeller + * @author Sam Brannen + * @author Michael Isvy + * @author Wick Dynex + */ +public interface OwnerRepository extends JpaRepository<Owner, Integer> { + + /** + * Retrieve {@link Owner}s from the data store by last name, returning all owners + * whose last name <i>starts</i> with the given name. + * @param lastName Value to search for + * @return a Collection of matching {@link Owner}s (or an empty Collection if none + * found) + */ + Page<Owner> findByLastNameStartingWith(String lastName, Pageable pageable); + + /** + * Retrieve an {@link Owner} from the data store by id. + * <p> + * This method returns an {@link Optional} containing the {@link Owner} if found. If + * no {@link Owner} is found with the provided id, it will return an empty + * {@link Optional}. + * </p> + * @param id the id to search for + * @return an {@link Optional} containing the {@link Owner} if found, or an empty + * {@link Optional} if not found. + * @throws IllegalArgumentException if the id is null (assuming null is not a valid + * input for id) + */ + Optional<Owner> findById(Integer id); + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/Pet.java b/src/main/java/org/springframework/samples/petclinic/owner/Pet.java new file mode 100644 index 0000000..4f8409e --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/Pet.java @@ -0,0 +1,85 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import java.time.LocalDate; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.samples.petclinic.model.NamedEntity; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OrderBy; +import jakarta.persistence.Table; + +/** + * Simple business object representing a pet. + * + * @author Ken Krebs + * @author Juergen Hoeller + * @author Sam Brannen + * @author Wick Dynex + */ +@Entity +@Table(name = "pets") +public class Pet extends NamedEntity { + + @Column + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate birthDate; + + @ManyToOne + @JoinColumn(name = "type_id") + private PetType type; + + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "pet_id") + @OrderBy("date ASC") + private final Set<Visit> visits = new LinkedHashSet<>(); + + public void setBirthDate(LocalDate birthDate) { + this.birthDate = birthDate; + } + + public LocalDate getBirthDate() { + return this.birthDate; + } + + public PetType getType() { + return this.type; + } + + public void setType(PetType type) { + this.type = type; + } + + public Collection<Visit> getVisits() { + return this.visits; + } + + public void addVisit(Visit visit) { + getVisits().add(visit); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/PetController.java b/src/main/java/org/springframework/samples/petclinic/owner/PetController.java new file mode 100644 index 0000000..ce1b8f4 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/PetController.java @@ -0,0 +1,183 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import jakarta.validation.Valid; + +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +/** + * @author Juergen Hoeller + * @author Ken Krebs + * @author Arjen Poutsma + * @author Wick Dynex + */ +@Controller +@RequestMapping("/owners/{ownerId}") +class PetController { + + private static final String VIEWS_PETS_CREATE_OR_UPDATE_FORM = "pets/createOrUpdatePetForm"; + + private final OwnerRepository owners; + + private final PetTypeRepository types; + + public PetController(OwnerRepository owners, PetTypeRepository types) { + this.owners = owners; + this.types = types; + } + + @ModelAttribute("types") + public Collection<PetType> populatePetTypes() { + return this.types.findPetTypes(); + } + + @ModelAttribute("owner") + public Owner findOwner(@PathVariable("ownerId") int ownerId) { + Optional<Owner> optionalOwner = this.owners.findById(ownerId); + Owner owner = optionalOwner.orElseThrow(() -> new IllegalArgumentException( + "Owner not found with id: " + ownerId + ". Please ensure the ID is correct ")); + return owner; + } + + @ModelAttribute("pet") + public Pet findPet(@PathVariable("ownerId") int ownerId, + @PathVariable(name = "petId", required = false) Integer petId) { + + if (petId == null) { + return new Pet(); + } + + Optional<Owner> optionalOwner = this.owners.findById(ownerId); + Owner owner = optionalOwner.orElseThrow(() -> new IllegalArgumentException( + "Owner not found with id: " + ownerId + ". Please ensure the ID is correct ")); + return owner.getPet(petId); + } + + @InitBinder("owner") + public void initOwnerBinder(WebDataBinder dataBinder) { + dataBinder.setDisallowedFields("id", "*.id"); + } + + @InitBinder("pet") + public void initPetBinder(WebDataBinder dataBinder) { + dataBinder.setValidator(new PetValidator()); + dataBinder.setDisallowedFields("id", "*.id"); + } + + @GetMapping("/pets/new") + public String initCreationForm(Owner owner, ModelMap model) { + Pet pet = new Pet(); + owner.addPet(pet); + return VIEWS_PETS_CREATE_OR_UPDATE_FORM; + } + + @PostMapping("/pets/new") + public String processCreationForm(Owner owner, @Valid Pet pet, BindingResult result, + RedirectAttributes redirectAttributes) { + + if (StringUtils.hasText(pet.getName()) && pet.isNew() && owner.getPet(pet.getName(), true) != null) { + result.rejectValue("name", "duplicate", "already exists"); + } + + LocalDate currentDate = LocalDate.now(); + if (pet.getBirthDate() != null && pet.getBirthDate().isAfter(currentDate)) { + result.rejectValue("birthDate", "typeMismatch.birthDate"); + } + + if (result.hasErrors()) { + return VIEWS_PETS_CREATE_OR_UPDATE_FORM; + } + + owner.addPet(pet); + this.owners.save(owner); + redirectAttributes.addFlashAttribute("message", "New Pet has been Added"); + return "redirect:/owners/{ownerId}"; + } + + @GetMapping("/pets/{petId}/edit") + public String initUpdateForm() { + return VIEWS_PETS_CREATE_OR_UPDATE_FORM; + } + + @PostMapping("/pets/{petId}/edit") + public String processUpdateForm(Owner owner, @Valid Pet pet, BindingResult result, + RedirectAttributes redirectAttributes) { + + String petName = pet.getName(); + + // checking if the pet name already exists for the owner + if (StringUtils.hasText(petName)) { + Pet existingPet = owner.getPet(petName, false); + if (existingPet != null && !Objects.equals(existingPet.getId(), pet.getId())) { + result.rejectValue("name", "duplicate", "already exists"); + } + } + + LocalDate currentDate = LocalDate.now(); + if (pet.getBirthDate() != null && pet.getBirthDate().isAfter(currentDate)) { + result.rejectValue("birthDate", "typeMismatch.birthDate"); + } + + if (result.hasErrors()) { + return VIEWS_PETS_CREATE_OR_UPDATE_FORM; + } + + updatePetDetails(owner, pet); + redirectAttributes.addFlashAttribute("message", "Pet details has been edited"); + return "redirect:/owners/{ownerId}"; + } + + /** + * Updates the pet details if it exists or adds a new pet to the owner. + * @param owner The owner of the pet + * @param pet The pet with updated details + */ + private void updatePetDetails(Owner owner, Pet pet) { + Integer id = pet.getId(); + Assert.state(id != null, "'pet.getId()' must not be null"); + Pet existingPet = owner.getPet(id); + if (existingPet != null) { + // Update existing pet's properties + existingPet.setName(pet.getName()); + existingPet.setBirthDate(pet.getBirthDate()); + existingPet.setType(pet.getType()); + } + else { + owner.addPet(pet); + } + this.owners.save(owner); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/PetType.java b/src/main/java/org/springframework/samples/petclinic/owner/PetType.java new file mode 100644 index 0000000..e7d63d1 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/PetType.java @@ -0,0 +1,30 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import org.springframework.samples.petclinic.model.NamedEntity; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +/** + * @author Juergen Hoeller Can be Cat, Dog, Hamster... + */ +@Entity +@Table(name = "types") +public class PetType extends NamedEntity { + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/PetTypeFormatter.java b/src/main/java/org/springframework/samples/petclinic/owner/PetTypeFormatter.java new file mode 100644 index 0000000..520ed3f --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/PetTypeFormatter.java @@ -0,0 +1,62 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import org.springframework.format.Formatter; +import org.springframework.stereotype.Component; + +import java.text.ParseException; +import java.util.Collection; +import java.util.Locale; +import java.util.Objects; + +/** + * Instructs Spring MVC on how to parse and print elements of type 'PetType'. Starting + * from Spring 3.0, Formatters have come as an improvement in comparison to legacy + * PropertyEditors. See the following links for more details: - The Spring ref doc: + * https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#format + * + * @author Mark Fisher + * @author Juergen Hoeller + * @author Michael Isvy + */ +@Component +public class PetTypeFormatter implements Formatter<PetType> { + + private final PetTypeRepository types; + + public PetTypeFormatter(PetTypeRepository types) { + this.types = types; + } + + @Override + public String print(PetType petType, Locale locale) { + String name = petType.getName(); + return name != null ? name : "<null>"; + } + + @Override + public PetType parse(String text, Locale locale) throws ParseException { + Collection<PetType> findPetTypes = this.types.findPetTypes(); + for (PetType type : findPetTypes) { + if (Objects.equals(type.getName(), text)) { + return type; + } + } + throw new ParseException("type not found: " + text, 0); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/PetTypeRepository.java b/src/main/java/org/springframework/samples/petclinic/owner/PetTypeRepository.java new file mode 100644 index 0000000..0b0d7bb --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/PetTypeRepository.java @@ -0,0 +1,39 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.owner; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +/** + * Repository class for <code>PetType</code> domain objects. + * + * @author Patrick Baumgartner + */ + +public interface PetTypeRepository extends JpaRepository<PetType, Integer> { + + /** + * Retrieve all {@link PetType}s from the data store. + * @return a Collection of {@link PetType}s. + */ + @Query("SELECT ptype FROM PetType ptype ORDER BY ptype.name") + List<PetType> findPetTypes(); + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/PetValidator.java b/src/main/java/org/springframework/samples/petclinic/owner/PetValidator.java new file mode 100644 index 0000000..dfe5304 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/PetValidator.java @@ -0,0 +1,64 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import org.springframework.util.StringUtils; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +/** + * <code>Validator</code> for <code>Pet</code> forms. + * <p> + * We're not using Bean Validation annotations here because it is easier to define such + * validation rule in Java. + * </p> + * + * @author Ken Krebs + * @author Juergen Hoeller + */ +public class PetValidator implements Validator { + + private static final String REQUIRED = "required"; + + @Override + public void validate(Object obj, Errors errors) { + Pet pet = (Pet) obj; + String name = pet.getName(); + // name validation + if (!StringUtils.hasText(name)) { + errors.rejectValue("name", REQUIRED, REQUIRED); + } + + // type validation + if (pet.isNew() && pet.getType() == null) { + errors.rejectValue("type", REQUIRED, REQUIRED); + } + + // birth date validation + if (pet.getBirthDate() == null) { + errors.rejectValue("birthDate", REQUIRED, REQUIRED); + } + } + + /** + * This Validator validates *just* Pet instances + */ + @Override + public boolean supports(Class<?> clazz) { + return Pet.class.isAssignableFrom(clazz); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/Visit.java b/src/main/java/org/springframework/samples/petclinic/owner/Visit.java new file mode 100644 index 0000000..085cd28 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/Visit.java @@ -0,0 +1,68 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import java.time.LocalDate; + +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.samples.petclinic.model.BaseEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; + +/** + * Simple JavaBean domain object representing a visit. + * + * @author Ken Krebs + * @author Dave Syer + */ +@Entity +@Table(name = "visits") +public class Visit extends BaseEntity { + + @Column(name = "visit_date") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate date; + + @NotBlank + private String description; + + /** + * Creates a new instance of Visit for the current date + */ + public Visit() { + this.date = LocalDate.now(); + } + + public LocalDate getDate() { + return this.date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public String getDescription() { + return this.description; + } + + public void setDescription(String description) { + this.description = description; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java b/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java new file mode 100644 index 0000000..c721f55 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java @@ -0,0 +1,104 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; + +import java.util.Map; +import java.util.Optional; + +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; + +import jakarta.validation.Valid; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +/** + * @author Juergen Hoeller + * @author Ken Krebs + * @author Arjen Poutsma + * @author Michael Isvy + * @author Dave Syer + * @author Wick Dynex + */ +@Controller +class VisitController { + + private final OwnerRepository owners; + + public VisitController(OwnerRepository owners) { + this.owners = owners; + } + + @InitBinder + public void setAllowedFields(WebDataBinder dataBinder) { + dataBinder.setDisallowedFields("id", "*.id"); + } + + /** + * Called before each and every @RequestMapping annotated method. 2 goals: - Make sure + * we always have fresh data - Since we do not use the session scope, make sure that + * Pet object always has an id (Even though id is not part of the form fields) + * @param petId + * @return Pet + */ + @ModelAttribute("visit") + public Visit loadPetWithVisit(@PathVariable("ownerId") int ownerId, @PathVariable("petId") int petId, + Map<String, Object> model) { + Optional<Owner> optionalOwner = owners.findById(ownerId); + Owner owner = optionalOwner.orElseThrow(() -> new IllegalArgumentException( + "Owner not found with id: " + ownerId + ". Please ensure the ID is correct ")); + + Pet pet = owner.getPet(petId); + if (pet == null) { + throw new IllegalArgumentException( + "Pet with id " + petId + " not found for owner with id " + ownerId + "."); + } + model.put("pet", pet); + model.put("owner", owner); + + Visit visit = new Visit(); + pet.addVisit(visit); + return visit; + } + + // Spring MVC calls method loadPetWithVisit(...) before initNewVisitForm is + // called + @GetMapping("/owners/{ownerId}/pets/{petId}/visits/new") + public String initNewVisitForm() { + return "pets/createOrUpdateVisitForm"; + } + + // Spring MVC calls method loadPetWithVisit(...) before processNewVisitForm is + // called + @PostMapping("/owners/{ownerId}/pets/{petId}/visits/new") + public String processNewVisitForm(@ModelAttribute Owner owner, @PathVariable int petId, @Valid Visit visit, + BindingResult result, RedirectAttributes redirectAttributes) { + if (result.hasErrors()) { + return "pets/createOrUpdateVisitForm"; + } + + owner.addVisit(petId, visit); + this.owners.save(owner); + redirectAttributes.addFlashAttribute("message", "Your visit has been booked"); + return "redirect:/owners/{ownerId}"; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/package-info.java b/src/main/java/org/springframework/samples/petclinic/owner/package-info.java new file mode 100644 index 0000000..9e2a3a4 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/package-info.java @@ -0,0 +1,16 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.owner; diff --git a/src/main/java/org/springframework/samples/petclinic/package-info.java b/src/main/java/org/springframework/samples/petclinic/package-info.java new file mode 100644 index 0000000..8c54417 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/package-info.java @@ -0,0 +1,16 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic; diff --git a/src/main/java/org/springframework/samples/petclinic/system/CacheConfiguration.java b/src/main/java/org/springframework/samples/petclinic/system/CacheConfiguration.java new file mode 100644 index 0000000..13cb743 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/system/CacheConfiguration.java @@ -0,0 +1,53 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.system; + +import org.springframework.boot.cache.autoconfigure.JCacheManagerCustomizer; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.cache.configuration.MutableConfiguration; + +/** + * Cache configuration intended for caches providing the JCache API. This configuration + * creates the used cache for the application and enables statistics that become + * accessible via JMX. + */ +@Configuration(proxyBeanMethods = false) +@EnableCaching +class CacheConfiguration { + + @Bean + public JCacheManagerCustomizer petclinicCacheConfigurationCustomizer() { + return cm -> cm.createCache("vets", cacheConfiguration()); + } + + /** + * Create a simple configuration that enable statistics via the JCache programmatic + * configuration API. + * <p> + * Within the configuration object that is provided by the JCache API standard, there + * is only a very limited set of configuration options. The really relevant + * configuration options (like the size limit) must be set via a configuration + * mechanism that is provided by the selected JCache implementation. + */ + private javax.cache.configuration.Configuration<Object, Object> cacheConfiguration() { + return new MutableConfiguration<>().setStatisticsEnabled(true); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/system/CrashController.java b/src/main/java/org/springframework/samples/petclinic/system/CrashController.java new file mode 100644 index 0000000..0081a56 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/system/CrashController.java @@ -0,0 +1,37 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.system; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * Controller used to showcase what happens when an exception is thrown + * + * @author Michael Isvy + * <p/> + * Also see how a view that resolves to "error" has been added ("error.html"). + */ +@Controller +class CrashController { + + @GetMapping("/oups") + public String triggerException() { + throw new RuntimeException( + "Expected: controller used to showcase what " + "happens when an exception is thrown"); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/system/WebConfiguration.java b/src/main/java/org/springframework/samples/petclinic/system/WebConfiguration.java new file mode 100644 index 0000000..1ef32e4 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/system/WebConfiguration.java @@ -0,0 +1,60 @@ +package org.springframework.samples.petclinic.system; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; +import org.springframework.web.servlet.i18n.SessionLocaleResolver; + +import java.util.Locale; + +/** + * Configures internationalization (i18n) support for the application. + * + * <p> + * Handles loading language-specific messages, tracking the user's language, and allowing + * language changes via the URL parameter (e.g., <code>?lang=de</code>). + * </p> + * + * @author Anuj Ashok Potdar + */ +@Configuration +@SuppressWarnings("unused") +public class WebConfiguration implements WebMvcConfigurer { + + /** + * Uses session storage to remember the user’s language setting across requests. + * Defaults to English if nothing is specified. + * @return session-based {@link LocaleResolver} + */ + @Bean + public LocaleResolver localeResolver() { + SessionLocaleResolver resolver = new SessionLocaleResolver(); + resolver.setDefaultLocale(Locale.ENGLISH); + return resolver; + } + + /** + * Allows the app to switch languages using a URL parameter like + * <code>?lang=es</code>. + * @return a {@link LocaleChangeInterceptor} that handles the change + */ + @Bean + public LocaleChangeInterceptor localeChangeInterceptor() { + LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor(); + interceptor.setParamName("lang"); + return interceptor; + } + + /** + * Registers the locale change interceptor so it can run on each request. + * @param registry where interceptors are added + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(localeChangeInterceptor()); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java b/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java new file mode 100644 index 0000000..d77a35e --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java @@ -0,0 +1,30 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.system; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +class WelcomeController { + + @GetMapping("/") + public String welcome() { + return "welcome"; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/system/package-info.java b/src/main/java/org/springframework/samples/petclinic/system/package-info.java new file mode 100644 index 0000000..7d14681 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/system/package-info.java @@ -0,0 +1,16 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.system; diff --git a/src/main/java/org/springframework/samples/petclinic/vet/Specialty.java b/src/main/java/org/springframework/samples/petclinic/vet/Specialty.java new file mode 100644 index 0000000..184bf5e --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/vet/Specialty.java @@ -0,0 +1,32 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.vet; + +import org.springframework.samples.petclinic.model.NamedEntity; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +/** + * Models a {@link Vet Vet's} specialty (for example, dentistry). + * + * @author Juergen Hoeller + */ +@Entity +@Table(name = "specialties") +public class Specialty extends NamedEntity { + +} diff --git a/src/main/java/org/springframework/samples/petclinic/vet/Vet.java b/src/main/java/org/springframework/samples/petclinic/vet/Vet.java new file mode 100644 index 0000000..fb2bd71 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/vet/Vet.java @@ -0,0 +1,74 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.vet; + +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.springframework.samples.petclinic.model.NamedEntity; +import org.springframework.samples.petclinic.model.Person; + +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; +import jakarta.xml.bind.annotation.XmlElement; + +/** + * Simple JavaBean domain object representing a veterinarian. + * + * @author Ken Krebs + * @author Juergen Hoeller + * @author Sam Brannen + * @author Arjen Poutsma + */ +@Entity +@Table(name = "vets") +public class Vet extends Person { + + @ManyToMany(fetch = FetchType.EAGER) + @JoinTable(name = "vet_specialties", joinColumns = @JoinColumn(name = "vet_id"), + inverseJoinColumns = @JoinColumn(name = "specialty_id")) + private Set<Specialty> specialties; + + protected Set<Specialty> getSpecialtiesInternal() { + if (this.specialties == null) { + this.specialties = new HashSet<>(); + } + return this.specialties; + } + + @XmlElement + public List<Specialty> getSpecialties() { + return getSpecialtiesInternal().stream() + .sorted(Comparator.comparing(NamedEntity::getName)) + .collect(Collectors.toList()); + } + + public int getNrOfSpecialties() { + return getSpecialtiesInternal().size(); + } + + public void addSpecialty(Specialty specialty) { + getSpecialtiesInternal().add(specialty); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/vet/VetController.java b/src/main/java/org/springframework/samples/petclinic/vet/VetController.java new file mode 100644 index 0000000..89ad9bc --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/vet/VetController.java @@ -0,0 +1,78 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.vet; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author Juergen Hoeller + * @author Mark Fisher + * @author Ken Krebs + * @author Arjen Poutsma + */ +@Controller +class VetController { + + private final VetRepository vetRepository; + + public VetController(VetRepository vetRepository) { + this.vetRepository = vetRepository; + } + + @GetMapping("/vets.html") + public String showVetList(@RequestParam(defaultValue = "1") int page, Model model) { + // Here we are returning an object of type 'Vets' rather than a collection of Vet + // objects so it is simpler for Object-Xml mapping + Vets vets = new Vets(); + Page<Vet> paginated = findPaginated(page); + vets.getVetList().addAll(paginated.toList()); + return addPaginationModel(page, paginated, model); + } + + private String addPaginationModel(int page, Page<Vet> paginated, Model model) { + List<Vet> listVets = paginated.getContent(); + model.addAttribute("currentPage", page); + model.addAttribute("totalPages", paginated.getTotalPages()); + model.addAttribute("totalItems", paginated.getTotalElements()); + model.addAttribute("listVets", listVets); + return "vets/vetList"; + } + + private Page<Vet> findPaginated(int page) { + int pageSize = 5; + Pageable pageable = PageRequest.of(page - 1, pageSize); + return vetRepository.findAll(pageable); + } + + @GetMapping({ "/vets" }) + public @ResponseBody Vets showResourcesVetList() { + // Here we are returning an object of type 'Vets' rather than a collection of Vet + // objects so it is simpler for JSon/Object mapping + Vets vets = new Vets(); + vets.getVetList().addAll(this.vetRepository.findAll()); + return vets; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java b/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java new file mode 100644 index 0000000..dbf68d0 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.vet; + +import org.springframework.cache.annotation.Cacheable; +import org.springframework.dao.DataAccessException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.repository.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; + +/** + * Repository class for <code>Vet</code> domain objects All method names are compliant + * with Spring Data naming conventions so this interface can easily be extended for Spring + * Data. See: + * https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation + * + * @author Ken Krebs + * @author Juergen Hoeller + * @author Sam Brannen + * @author Michael Isvy + */ +public interface VetRepository extends Repository<Vet, Integer> { + + /** + * Retrieve all <code>Vet</code>s from the data store. + * @return a <code>Collection</code> of <code>Vet</code>s + */ + @Transactional(readOnly = true) + @Cacheable("vets") + Collection<Vet> findAll() throws DataAccessException; + + /** + * Retrieve all <code>Vet</code>s from data store in Pages + * @param pageable + * @return + * @throws DataAccessException + */ + @Transactional(readOnly = true) + @Cacheable("vets") + Page<Vet> findAll(Pageable pageable) throws DataAccessException; + +} diff --git a/src/main/java/org/springframework/samples/petclinic/vet/Vets.java b/src/main/java/org/springframework/samples/petclinic/vet/Vets.java new file mode 100644 index 0000000..634cad7 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/vet/Vets.java @@ -0,0 +1,43 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.vet; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; + +/** + * Simple domain object representing a list of veterinarians. Mostly here to be used for + * the 'vets' {@link org.springframework.web.servlet.view.xml.MarshallingView}. + * + * @author Arjen Poutsma + */ +@XmlRootElement +public class Vets { + + private List<Vet> vets; + + @XmlElement + public List<Vet> getVetList() { + if (vets == null) { + vets = new ArrayList<>(); + } + return vets; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/vet/package-info.java b/src/main/java/org/springframework/samples/petclinic/vet/package-info.java new file mode 100644 index 0000000..544db4c --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/vet/package-info.java @@ -0,0 +1,16 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.vet; diff --git a/src/main/resources/application-mysql.properties b/src/main/resources/application-mysql.properties new file mode 100644 index 0000000..e23dfa6 --- /dev/null +++ b/src/main/resources/application-mysql.properties @@ -0,0 +1,7 @@ +# database init, supports mysql too +database=mysql +spring.datasource.url=${MYSQL_URL:jdbc:mysql://localhost/petclinic} +spring.datasource.username=${MYSQL_USER:petclinic} +spring.datasource.password=${MYSQL_PASS:petclinic} +# SQL is written to be idempotent so this is safe +spring.sql.init.mode=always diff --git a/src/main/resources/application-postgres.properties b/src/main/resources/application-postgres.properties new file mode 100644 index 0000000..b265d7e --- /dev/null +++ b/src/main/resources/application-postgres.properties @@ -0,0 +1,7 @@ +# database init, supports postgres too +database=postgres +spring.datasource.url=${POSTGRES_URL:jdbc:postgresql://localhost/petclinic} +spring.datasource.username=${POSTGRES_USER:petclinic} +spring.datasource.password=${POSTGRES_PASS:petclinic} +# SQL is written to be idempotent so this is safe +spring.sql.init.mode=always diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..d000edb --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,29 @@ +# database init, supports mysql too +database=h2 +spring.sql.init.schema-locations=classpath*:db/${database}/schema.sql +spring.sql.init.data-locations=classpath*:db/${database}/data.sql + +# Web +spring.thymeleaf.mode=HTML + +# JPA +spring.jpa.hibernate.ddl-auto=none +spring.jpa.open-in-view=false +spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategySnakeCaseImpl +spring.jpa.properties.hibernate.default_batch_fetch_size=16 + +# Internationalization +spring.messages.basename=messages/messages + +# Actuator +# Expose all actuator endpoints for monitoring and management purposes +# Don't do this in production, only for development and testing +management.endpoints.web.exposure.include=* + +# Logging +logging.level.org.springframework=INFO +# logging.level.org.springframework.web=DEBUG +# logging.level.org.springframework.context.annotation=TRACE + +# Maximum time static resources should be cached +spring.web.resources.cache.cachecontrol.max-age=12h diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt new file mode 100644 index 0000000..6225d12 --- /dev/null +++ b/src/main/resources/banner.txt @@ -0,0 +1,15 @@ + + + |\ _,,,--,,_ + /,`.-'`' ._ \-;;,_ + _______ __|,4- ) )_ .;.(__`'-'__ ___ __ _ ___ _______ + | | '---''(_/._)-'(_\_) | | | | | | | | | + | _ | ___|_ _| | | | | |_| | | | __ _ _ + | |_| | |___ | | | | | | | | | | \ \ \ \ + | ___| ___| | | | _| |___| | _ | | _| \ \ \ \ + | | | |___ | | | |_| | | | | | | |_ ) ) ) ) + |___| |_______| |___| |_______|_______|___|_| |__|___|_______| / / / / + ==================================================================/_/_/_/ + +:: Built with Spring Boot :: ${spring-boot.version} + diff --git a/src/main/resources/db/h2/data.sql b/src/main/resources/db/h2/data.sql new file mode 100644 index 0000000..f232b13 --- /dev/null +++ b/src/main/resources/db/h2/data.sql @@ -0,0 +1,53 @@ +INSERT INTO vets VALUES (default, 'James', 'Carter'); +INSERT INTO vets VALUES (default, 'Helen', 'Leary'); +INSERT INTO vets VALUES (default, 'Linda', 'Douglas'); +INSERT INTO vets VALUES (default, 'Rafael', 'Ortega'); +INSERT INTO vets VALUES (default, 'Henry', 'Stevens'); +INSERT INTO vets VALUES (default, 'Sharon', 'Jenkins'); + +INSERT INTO specialties VALUES (default, 'radiology'); +INSERT INTO specialties VALUES (default, 'surgery'); +INSERT INTO specialties VALUES (default, 'dentistry'); + +INSERT INTO vet_specialties VALUES (2, 1); +INSERT INTO vet_specialties VALUES (3, 2); +INSERT INTO vet_specialties VALUES (3, 3); +INSERT INTO vet_specialties VALUES (4, 2); +INSERT INTO vet_specialties VALUES (5, 1); + +INSERT INTO types VALUES (default, 'cat'); +INSERT INTO types VALUES (default, 'dog'); +INSERT INTO types VALUES (default, 'lizard'); +INSERT INTO types VALUES (default, 'snake'); +INSERT INTO types VALUES (default, 'bird'); +INSERT INTO types VALUES (default, 'hamster'); + +INSERT INTO owners VALUES (default, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023'); +INSERT INTO owners VALUES (default, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749'); +INSERT INTO owners VALUES (default, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763'); +INSERT INTO owners VALUES (default, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198'); +INSERT INTO owners VALUES (default, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765'); +INSERT INTO owners VALUES (default, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654'); +INSERT INTO owners VALUES (default, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387'); +INSERT INTO owners VALUES (default, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683'); +INSERT INTO owners VALUES (default, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435'); +INSERT INTO owners VALUES (default, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487'); + +INSERT INTO pets VALUES (default, 'Leo', '2010-09-07', 1, 1); +INSERT INTO pets VALUES (default, 'Basil', '2012-08-06', 6, 2); +INSERT INTO pets VALUES (default, 'Rosy', '2011-04-17', 2, 3); +INSERT INTO pets VALUES (default, 'Jewel', '2010-03-07', 2, 3); +INSERT INTO pets VALUES (default, 'Iggy', '2010-11-30', 3, 4); +INSERT INTO pets VALUES (default, 'George', '2010-01-20', 4, 5); +INSERT INTO pets VALUES (default, 'Samantha', '2012-09-04', 1, 6); +INSERT INTO pets VALUES (default, 'Max', '2012-09-04', 1, 6); +INSERT INTO pets VALUES (default, 'Lucky', '2011-08-06', 5, 7); +INSERT INTO pets VALUES (default, 'Mulligan', '2007-02-24', 2, 8); +INSERT INTO pets VALUES (default, 'Freddy', '2010-03-09', 5, 9); +INSERT INTO pets VALUES (default, 'Lucky', '2010-06-24', 2, 10); +INSERT INTO pets VALUES (default, 'Sly', '2012-06-08', 1, 10); + +INSERT INTO visits VALUES (default, 7, '2013-01-01', 'rabies shot'); +INSERT INTO visits VALUES (default, 8, '2013-01-02', 'rabies shot'); +INSERT INTO visits VALUES (default, 8, '2013-01-03', 'neutered'); +INSERT INTO visits VALUES (default, 7, '2013-01-04', 'spayed'); diff --git a/src/main/resources/db/h2/schema.sql b/src/main/resources/db/h2/schema.sql new file mode 100644 index 0000000..4a6c322 --- /dev/null +++ b/src/main/resources/db/h2/schema.sql @@ -0,0 +1,64 @@ +DROP TABLE vet_specialties IF EXISTS; +DROP TABLE vets IF EXISTS; +DROP TABLE specialties IF EXISTS; +DROP TABLE visits IF EXISTS; +DROP TABLE pets IF EXISTS; +DROP TABLE types IF EXISTS; +DROP TABLE owners IF EXISTS; + + +CREATE TABLE vets ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + first_name VARCHAR(30), + last_name VARCHAR(30) +); +CREATE INDEX vets_last_name ON vets (last_name); + +CREATE TABLE specialties ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(80) +); +CREATE INDEX specialties_name ON specialties (name); + +CREATE TABLE vet_specialties ( + vet_id INTEGER NOT NULL, + specialty_id INTEGER NOT NULL +); +ALTER TABLE vet_specialties ADD CONSTRAINT fk_vet_specialties_vets FOREIGN KEY (vet_id) REFERENCES vets (id); +ALTER TABLE vet_specialties ADD CONSTRAINT fk_vet_specialties_specialties FOREIGN KEY (specialty_id) REFERENCES specialties (id); + +CREATE TABLE types ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(80) +); +CREATE INDEX types_name ON types (name); + +CREATE TABLE owners ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + first_name VARCHAR(30), + last_name VARCHAR_IGNORECASE(30), + address VARCHAR(255), + city VARCHAR(80), + telephone VARCHAR(20) +); +CREATE INDEX owners_last_name ON owners (last_name); + +CREATE TABLE pets ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(30), + birth_date DATE, + type_id INTEGER NOT NULL, + owner_id INTEGER +); +ALTER TABLE pets ADD CONSTRAINT fk_pets_owners FOREIGN KEY (owner_id) REFERENCES owners (id); +ALTER TABLE pets ADD CONSTRAINT fk_pets_types FOREIGN KEY (type_id) REFERENCES types (id); +CREATE INDEX pets_name ON pets (name); + +CREATE TABLE visits ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + pet_id INTEGER, + visit_date DATE, + description VARCHAR(255) +); +ALTER TABLE visits ADD CONSTRAINT fk_visits_pets FOREIGN KEY (pet_id) REFERENCES pets (id); +CREATE INDEX visits_pet_id ON visits (pet_id); diff --git a/src/main/resources/db/mysql/data.sql b/src/main/resources/db/mysql/data.sql new file mode 100644 index 0000000..3f1dcf8 --- /dev/null +++ b/src/main/resources/db/mysql/data.sql @@ -0,0 +1,53 @@ +INSERT IGNORE INTO vets VALUES (1, 'James', 'Carter'); +INSERT IGNORE INTO vets VALUES (2, 'Helen', 'Leary'); +INSERT IGNORE INTO vets VALUES (3, 'Linda', 'Douglas'); +INSERT IGNORE INTO vets VALUES (4, 'Rafael', 'Ortega'); +INSERT IGNORE INTO vets VALUES (5, 'Henry', 'Stevens'); +INSERT IGNORE INTO vets VALUES (6, 'Sharon', 'Jenkins'); + +INSERT IGNORE INTO specialties VALUES (1, 'radiology'); +INSERT IGNORE INTO specialties VALUES (2, 'surgery'); +INSERT IGNORE INTO specialties VALUES (3, 'dentistry'); + +INSERT IGNORE INTO vet_specialties VALUES (2, 1); +INSERT IGNORE INTO vet_specialties VALUES (3, 2); +INSERT IGNORE INTO vet_specialties VALUES (3, 3); +INSERT IGNORE INTO vet_specialties VALUES (4, 2); +INSERT IGNORE INTO vet_specialties VALUES (5, 1); + +INSERT IGNORE INTO types VALUES (1, 'cat'); +INSERT IGNORE INTO types VALUES (2, 'dog'); +INSERT IGNORE INTO types VALUES (3, 'lizard'); +INSERT IGNORE INTO types VALUES (4, 'snake'); +INSERT IGNORE INTO types VALUES (5, 'bird'); +INSERT IGNORE INTO types VALUES (6, 'hamster'); + +INSERT IGNORE INTO owners VALUES (1, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023'); +INSERT IGNORE INTO owners VALUES (2, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749'); +INSERT IGNORE INTO owners VALUES (3, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763'); +INSERT IGNORE INTO owners VALUES (4, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198'); +INSERT IGNORE INTO owners VALUES (5, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765'); +INSERT IGNORE INTO owners VALUES (6, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654'); +INSERT IGNORE INTO owners VALUES (7, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387'); +INSERT IGNORE INTO owners VALUES (8, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683'); +INSERT IGNORE INTO owners VALUES (9, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435'); +INSERT IGNORE INTO owners VALUES (10, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487'); + +INSERT IGNORE INTO pets VALUES (1, 'Leo', '2000-09-07', 1, 1); +INSERT IGNORE INTO pets VALUES (2, 'Basil', '2002-08-06', 6, 2); +INSERT IGNORE INTO pets VALUES (3, 'Rosy', '2001-04-17', 2, 3); +INSERT IGNORE INTO pets VALUES (4, 'Jewel', '2000-03-07', 2, 3); +INSERT IGNORE INTO pets VALUES (5, 'Iggy', '2000-11-30', 3, 4); +INSERT IGNORE INTO pets VALUES (6, 'George', '2000-01-20', 4, 5); +INSERT IGNORE INTO pets VALUES (7, 'Samantha', '1995-09-04', 1, 6); +INSERT IGNORE INTO pets VALUES (8, 'Max', '1995-09-04', 1, 6); +INSERT IGNORE INTO pets VALUES (9, 'Lucky', '1999-08-06', 5, 7); +INSERT IGNORE INTO pets VALUES (10, 'Mulligan', '1997-02-24', 2, 8); +INSERT IGNORE INTO pets VALUES (11, 'Freddy', '2000-03-09', 5, 9); +INSERT IGNORE INTO pets VALUES (12, 'Lucky', '2000-06-24', 2, 10); +INSERT IGNORE INTO pets VALUES (13, 'Sly', '2002-06-08', 1, 10); + +INSERT IGNORE INTO visits VALUES (1, 7, '2010-03-04', 'rabies shot'); +INSERT IGNORE INTO visits VALUES (2, 8, '2011-03-04', 'rabies shot'); +INSERT IGNORE INTO visits VALUES (3, 8, '2009-06-04', 'neutered'); +INSERT IGNORE INTO visits VALUES (4, 7, '2008-09-04', 'spayed'); diff --git a/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt b/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt new file mode 100644 index 0000000..8b39c07 --- /dev/null +++ b/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt @@ -0,0 +1,36 @@ +================================================================================ +=== Spring PetClinic sample application - MySQL Configuration === +================================================================================ + +@author Sam Brannen +@author Costin Leau +@author Dave Syer + +-------------------------------------------------------------------------------- + +1) Download and install the MySQL database (e.g., MySQL Community Server 5.1.x), + which can be found here: https://dev.mysql.com/downloads/. Or run the + "docker-compose.yml" from the root of the project (if you have docker installed + locally): + + $ docker-compose up + ... + mysql_1_eedb4818d817 | MySQL init process done. Ready for start up. + ... + +2) (Once only) create the PetClinic database and user by executing the "db/mysql/user.sql" + scripts. You can connect to the database running in the docker container using + `mysql -u root -h localhost --protocol tcp`, but you don't need to run the script there + because the petclinic user is already set up if you use the provided `docker-compose.yml`. + +3) Run the app with `spring.profiles.active=mysql` (e.g. as a System property via the command + line, but any way that sets that property in a Spring Boot app should work). For example use + + mvn spring-boot:run -Dspring-boot.run.profiles=mysql + + To activate the profile on the command line. + +N.B. the "petclinic" database has to exist for the app to work with the JDBC URL value +as it is configured by default. This condition is taken care of automatically by the +docker-compose configuration provided, or by the `user.sql` script if you run that as +root. diff --git a/src/main/resources/db/mysql/schema.sql b/src/main/resources/db/mysql/schema.sql new file mode 100644 index 0000000..2591a51 --- /dev/null +++ b/src/main/resources/db/mysql/schema.sql @@ -0,0 +1,55 @@ +CREATE TABLE IF NOT EXISTS vets ( + id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + first_name VARCHAR(30), + last_name VARCHAR(30), + INDEX(last_name) +) engine=InnoDB; + +CREATE TABLE IF NOT EXISTS specialties ( + id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(80), + INDEX(name) +) engine=InnoDB; + +CREATE TABLE IF NOT EXISTS vet_specialties ( + vet_id INT(4) UNSIGNED NOT NULL, + specialty_id INT(4) UNSIGNED NOT NULL, + FOREIGN KEY (vet_id) REFERENCES vets(id), + FOREIGN KEY (specialty_id) REFERENCES specialties(id), + UNIQUE (vet_id,specialty_id) +) engine=InnoDB; + +CREATE TABLE IF NOT EXISTS types ( + id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(80), + INDEX(name) +) engine=InnoDB; + +CREATE TABLE IF NOT EXISTS owners ( + id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + first_name VARCHAR(30), + last_name VARCHAR(30), + address VARCHAR(255), + city VARCHAR(80), + telephone VARCHAR(20), + INDEX(last_name) +) engine=InnoDB; + +CREATE TABLE IF NOT EXISTS pets ( + id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(30), + birth_date DATE, + type_id INT(4) UNSIGNED NOT NULL, + owner_id INT(4) UNSIGNED, + INDEX(name), + FOREIGN KEY (owner_id) REFERENCES owners(id), + FOREIGN KEY (type_id) REFERENCES types(id) +) engine=InnoDB; + +CREATE TABLE IF NOT EXISTS visits ( + id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + pet_id INT(4) UNSIGNED, + visit_date DATE, + description VARCHAR(255), + FOREIGN KEY (pet_id) REFERENCES pets(id) +) engine=InnoDB; diff --git a/src/main/resources/db/mysql/user.sql b/src/main/resources/db/mysql/user.sql new file mode 100644 index 0000000..4cdf825 --- /dev/null +++ b/src/main/resources/db/mysql/user.sql @@ -0,0 +1,11 @@ +CREATE DATABASE IF NOT EXISTS petclinic; + +ALTER DATABASE petclinic + DEFAULT CHARACTER SET utf8 + DEFAULT COLLATE utf8_general_ci; + +CREATE USER IF NOT EXISTS 'petclinic'@'%' IDENTIFIED BY 'petclinic'; + +GRANT ALL PRIVILEGES ON petclinic.* TO 'petclinic'@'%'; + +FLUSH PRIVILEGES; diff --git a/src/main/resources/db/postgres/data.sql b/src/main/resources/db/postgres/data.sql new file mode 100644 index 0000000..5b53366 --- /dev/null +++ b/src/main/resources/db/postgres/data.sql @@ -0,0 +1,53 @@ +INSERT INTO vets (first_name, last_name) SELECT 'James', 'Carter' WHERE NOT EXISTS (SELECT * FROM vets WHERE id=1); +INSERT INTO vets (first_name, last_name) SELECT 'Helen', 'Leary' WHERE NOT EXISTS (SELECT * FROM vets WHERE id=2); +INSERT INTO vets (first_name, last_name) SELECT 'Linda', 'Douglas' WHERE NOT EXISTS (SELECT * FROM vets WHERE id=3); +INSERT INTO vets (first_name, last_name) SELECT 'Rafael', 'Ortega' WHERE NOT EXISTS (SELECT * FROM vets WHERE id=4); +INSERT INTO vets (first_name, last_name) SELECT 'Henry', 'Stevens' WHERE NOT EXISTS (SELECT * FROM vets WHERE id=5); +INSERT INTO vets (first_name, last_name) SELECT 'Sharon', 'Jenkins' WHERE NOT EXISTS (SELECT * FROM vets WHERE id=6); + +INSERT INTO specialties (name) SELECT 'radiology' WHERE NOT EXISTS (SELECT * FROM specialties WHERE name='radiology'); +INSERT INTO specialties (name) SELECT 'surgery' WHERE NOT EXISTS (SELECT * FROM specialties WHERE name='surgery'); +INSERT INTO specialties (name) SELECT 'dentistry' WHERE NOT EXISTS (SELECT * FROM specialties WHERE name='dentistry'); + +INSERT INTO vet_specialties VALUES (2, 1) ON CONFLICT (vet_id, specialty_id) DO NOTHING; +INSERT INTO vet_specialties VALUES (3, 2) ON CONFLICT (vet_id, specialty_id) DO NOTHING; +INSERT INTO vet_specialties VALUES (3, 3) ON CONFLICT (vet_id, specialty_id) DO NOTHING; +INSERT INTO vet_specialties VALUES (4, 2) ON CONFLICT (vet_id, specialty_id) DO NOTHING; +INSERT INTO vet_specialties VALUES (5, 1) ON CONFLICT (vet_id, specialty_id) DO NOTHING; + +INSERT INTO types (name) SELECT 'cat' WHERE NOT EXISTS (SELECT * FROM types WHERE name='cat'); +INSERT INTO types (name) SELECT 'dog' WHERE NOT EXISTS (SELECT * FROM types WHERE name='dog'); +INSERT INTO types (name) SELECT 'lizard' WHERE NOT EXISTS (SELECT * FROM types WHERE name='lizard'); +INSERT INTO types (name) SELECT 'snake' WHERE NOT EXISTS (SELECT * FROM types WHERE name='snake'); +INSERT INTO types (name) SELECT 'bird' WHERE NOT EXISTS (SELECT * FROM types WHERE name='bird'); +INSERT INTO types (name) SELECT 'hamster' WHERE NOT EXISTS (SELECT * FROM types WHERE name='hamster'); + +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=1); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=2); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=3); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=4); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=5); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=6); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=7); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=8); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=9); +INSERT INTO owners (first_name, last_name, address, city, telephone) SELECT 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487' WHERE NOT EXISTS (SELECT * FROM owners WHERE id=10); + +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Leo', '2000-09-07', 1, 1 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=1); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Basil', '2002-08-06', 6, 2 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=2); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Rosy', '2001-04-17', 2, 3 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=3); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Jewel', '2000-03-07', 2, 3 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=4); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Iggy', '2000-11-30', 3, 4 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=5); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'George', '2000-01-20', 4, 5 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=6); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Samantha', '1995-09-04', 1, 6 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=7); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Max', '1995-09-04', 1, 6 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=8); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Lucky', '1999-08-06', 5, 7 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=9); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Mulligan', '1997-02-24', 2, 8 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=10); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Freddy', '2000-03-09', 5, 9 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=11); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Lucky', '2000-06-24', 2, 10 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=12); +INSERT INTO pets (name, birth_date, type_id, owner_id) SELECT 'Sly', '2002-06-08', 1, 10 WHERE NOT EXISTS (SELECT * FROM pets WHERE id=13); + +INSERT INTO visits (pet_id, visit_date, description) SELECT 7, '2010-03-04', 'rabies shot' WHERE NOT EXISTS (SELECT * FROM visits WHERE id=1); +INSERT INTO visits (pet_id, visit_date, description) SELECT 8, '2011-03-04', 'rabies shot' WHERE NOT EXISTS (SELECT * FROM visits WHERE id=2); +INSERT INTO visits (pet_id, visit_date, description) SELECT 8, '2009-06-04', 'neutered' WHERE NOT EXISTS (SELECT * FROM visits WHERE id=3); +INSERT INTO visits (pet_id, visit_date, description) SELECT 7, '2008-09-04', 'spayed' WHERE NOT EXISTS (SELECT * FROM visits WHERE id=4); diff --git a/src/main/resources/db/postgres/petclinic_db_setup_postgres.txt b/src/main/resources/db/postgres/petclinic_db_setup_postgres.txt new file mode 100644 index 0000000..a998749 --- /dev/null +++ b/src/main/resources/db/postgres/petclinic_db_setup_postgres.txt @@ -0,0 +1,19 @@ +=============================================================================== +=== Spring PetClinic sample application - PostgreSQL Configuration === +=============================================================================== + +-------------------------------------------------------------------------------- + +1) Run the "docker-compose.yml" from the root of the project: + + $ docker-compose up + ... + spring-petclinic-postgres-1 | The files belonging to this database system will be owned by user "postgres". + ... + +2) Run the app with `spring.profiles.active=postgres` (e.g. as a System property via the command + line, but any way that sets that property in a Spring Boot app should work). For example use + + mvn spring-boot:run -Dspring-boot.run.profiles=postgres + + To activate the profile on the command line. diff --git a/src/main/resources/db/postgres/schema.sql b/src/main/resources/db/postgres/schema.sql new file mode 100644 index 0000000..1bd582d --- /dev/null +++ b/src/main/resources/db/postgres/schema.sql @@ -0,0 +1,52 @@ +CREATE TABLE IF NOT EXISTS vets ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + first_name TEXT, + last_name TEXT +); +CREATE INDEX ON vets (last_name); + +CREATE TABLE IF NOT EXISTS specialties ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name TEXT +); +CREATE INDEX ON specialties (name); + +CREATE TABLE IF NOT EXISTS vet_specialties ( + vet_id INT NOT NULL REFERENCES vets (id), + specialty_id INT NOT NULL REFERENCES specialties (id), + UNIQUE (vet_id, specialty_id) +); + +CREATE TABLE IF NOT EXISTS types ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name TEXT +); +CREATE INDEX ON types (name); + +CREATE TABLE IF NOT EXISTS owners ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + first_name TEXT, + last_name TEXT, + address TEXT, + city TEXT, + telephone TEXT +); +CREATE INDEX ON owners (last_name); + +CREATE TABLE IF NOT EXISTS pets ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name TEXT, + birth_date DATE, + type_id INT NOT NULL REFERENCES types (id), + owner_id INT REFERENCES owners (id) +); +CREATE INDEX ON pets (name); +CREATE INDEX ON pets (owner_id); + +CREATE TABLE IF NOT EXISTS visits ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + pet_id INT REFERENCES pets (id), + visit_date DATE, + description TEXT +); +CREATE INDEX ON visits (pet_id); diff --git a/src/main/resources/messages/messages.properties b/src/main/resources/messages/messages.properties new file mode 100644 index 0000000..1935658 --- /dev/null +++ b/src/main/resources/messages/messages.properties @@ -0,0 +1,51 @@ +welcome=Welcome +required=is required +notFound=has not been found +duplicate=is already in use +nonNumeric=must be all numeric +duplicateFormSubmission=Duplicate form submission is not allowed +typeMismatch.date=invalid date +typeMismatch.birthDate=invalid date +owner=Owner +firstName=First Name +lastName=Last Name +address=Address +city=City +telephone=Telephone +owners=Owners +addOwner=Add Owner +findOwner=Find Owner +findOwners=Find Owners +updateOwner=Update Owner +vets=Veterinarians +name=Name +specialties=Specialties +none=none +pages=pages +first=First +next=Next +previous=Previous +last=Last +somethingHappened=Something happened... +pets=Pets +home=Home +error=Error +telephone.invalid=Telephone must be a 10-digit number +layoutTitle=PetClinic :: a Spring Framework demonstration +pet=Pet +birthDate=Birth Date +type=Type +previousVisits=Previous Visits +date=Date +description=Description +new=New +addVisit=Add Visit +editPet=Edit Pet +ownerInformation=Owner Information +visitDate=Visit Date +editOwner=Edit Owner +addNewPet=Add New Pet +petsAndVisits=Pets and Visits +error.404=The requested page was not found. +error.500=An internal server error occurred. +error.general=An unexpected error occurred. diff --git a/src/main/resources/messages/messages_de.properties b/src/main/resources/messages/messages_de.properties new file mode 100644 index 0000000..89a08ea --- /dev/null +++ b/src/main/resources/messages/messages_de.properties @@ -0,0 +1,51 @@ +welcome=Willkommen +required=muss angegeben werden +notFound=wurde nicht gefunden +duplicate=ist bereits vergeben +nonNumeric=darf nur numerisch sein +duplicateFormSubmission=Wiederholtes Absenden des Formulars ist nicht erlaubt +typeMismatch.date=ung�ltiges Datum +typeMismatch.birthDate=ung�ltiges Datum +owner=Besitzer +firstName=Vorname +lastName=Nachname +address=Adresse +city=Stadt +telephone=Telefon +owners=Besitzer +addOwner=Besitzer hinzufügen +findOwner=Besitzer finden +findOwners=Besitzer suchen +updateOwner=Besitzer aktualisieren +vets=Tierärzte +name=Name +specialties=Fachgebiete +none=keine +pages=Seiten +first=Erste +next=Nächste +previous=Vorherige +last=Letzte +somethingHappened=Etwas ist passiert... +pets=Haustiere +home=Startseite +error=Fehler +telephone.invalid=Telefonnummer muss aus 10 Ziffern bestehen +layoutTitle=PetClinic :: eine Demonstration des Spring Frameworks +pet=Haustier +birthDate=Geburtsdatum +type=Typ +previousVisits=Frühere Besuche +date=Datum +description=Beschreibung +new=Neu +addVisit=Besuch hinzufügen +editPet=Haustier bearbeiten +ownerInformation=Besitzerinformationen +visitDate=Besuchsdatum +editOwner=Besitzer bearbeiten +addNewPet=Neues Haustier hinzufügen +petsAndVisits=Haustiere und Besuche +error.404=Die angeforderte Seite wurde nicht gefunden. +error.500=Ein interner Serverfehler ist aufgetreten. +error.general=Ein unerwarteter Fehler ist aufgetreten. diff --git a/src/main/resources/messages/messages_en.properties b/src/main/resources/messages/messages_en.properties new file mode 100644 index 0000000..05d519b --- /dev/null +++ b/src/main/resources/messages/messages_en.properties @@ -0,0 +1 @@ +# This file is intentionally empty. Message look-ups will fall back to the default "messages.properties" file. \ No newline at end of file diff --git a/src/main/resources/messages/messages_es.properties b/src/main/resources/messages/messages_es.properties new file mode 100644 index 0000000..911d733 --- /dev/null +++ b/src/main/resources/messages/messages_es.properties @@ -0,0 +1,51 @@ +welcome=Bienvenido +required=Es requerido +notFound=No ha sido encontrado +duplicate=Ya se encuentra en uso +nonNumeric=Sólo debe contener numeros +duplicateFormSubmission=No se permite el envío de formularios duplicados +typeMismatch.date=Fecha invalida +typeMismatch.birthDate=Fecha invalida +owner=Propietario +firstName=Nombre +lastName=Apellido +address=Dirección +city=Ciudad +telephone=Teléfono +owners=Propietarios +addOwner=Añadir propietario +findOwner=Buscar propietario +findOwners=Buscar propietarios +updateOwner=Actualizar propietario +vets=Veterinarios +name=Nombre +specialties=Especialidades +none=ninguno +pages=páginas +first=Primero +next=Siguiente +previous=Anterior +last=Último +somethingHappened=Algo pasó... +pets=Mascotas +home=Inicio +error=Error +telephone.invalid=El número de teléfono debe tener 10 dígitos +layoutTitle=PetClinic :: una demostración de Spring Framework +pet=Mascota +birthDate=Fecha de nacimiento +type=Tipo +previousVisits=Visitas anteriores +date=Fecha +description=Descripción +new=Nuevo +addVisit=Agregar visita +editPet=Editar mascota +ownerInformation=Información del propietario +visitDate=Fecha de visita +editOwner=Editar propietario +addNewPet=Agregar nueva mascota +petsAndVisits=Mascotas y visitas +error.404=La página solicitada no fue encontrada. +error.500=Ocurrió un error interno del servidor. +error.general=Ocurrió un error inesperado. diff --git a/src/main/resources/messages/messages_fa.properties b/src/main/resources/messages/messages_fa.properties new file mode 100644 index 0000000..6d0994a --- /dev/null +++ b/src/main/resources/messages/messages_fa.properties @@ -0,0 +1,51 @@ +welcome=خوش آمدید +required=الزامی +notFound=یافت نشد +duplicate=قبلا استفاده شده +nonNumeric=باید عددی باشد +duplicateFormSubmission=ارسال تکراری فرم مجاز نیست +typeMismatch.date=تاریخ نامعتبر +typeMismatch.birthDate=تاریخ تولد نامعتبر +owner=مالک +firstName=نام +lastName=نام خانوادگی +address=آدرس +city=شهر +telephone=تلفن +owners=مالکان +addOwner=افزودن مالک +findOwner=یافتن مالک +findOwners=یافتن مالکان +updateOwner=ویرایش مالک +vets=دامپزشکان +name=نام +specialties=تخصص‌ها +none=هیچ‌کدام +pages=صفحات +first=اول +next=بعدی +previous=قبلی +last=آخر +somethingHappened=مشکلی پیش آمد... +pets=حیوانات خانگی +home=خانه +error=خطا +telephone.invalid=شماره تلفن باید ۱۰ رقمی باشد +layoutTitle=PetClinic :: یک نمایش از Spring Framework +pet=حیوان خانگی +birthDate=تاریخ تولد +type=نوع +previousVisits=ویزیت‌های قبلی +date=تاریخ +description=توضیحات +new=جدید +addVisit=افزودن ویزیت +editPet=ویرایش حیوان خانگی +ownerInformation=اطلاعات مالک +visitDate=تاریخ ویزیت +editOwner=ویرایش مالک +addNewPet=افزودن حیوان خانگی جدید +petsAndVisits=حیوانات و ویزیت‌ها +error.404=صفحه درخواستی پیدا نشد. +error.500=خطای داخلی سرور رخ داد. +error.general=خطای غیرمنتظره‌ای رخ داد. diff --git a/src/main/resources/messages/messages_ko.properties b/src/main/resources/messages/messages_ko.properties new file mode 100644 index 0000000..6e2f488 --- /dev/null +++ b/src/main/resources/messages/messages_ko.properties @@ -0,0 +1,51 @@ +welcome=환영합니다 +required=입력이 필요합니다 +notFound=찾을 수 없습니다 +duplicate=이미 존재합니다 +nonNumeric=모두 숫자로 입력해야 합니다 +duplicateFormSubmission=중복 제출은 허용되지 않습니다 +typeMismatch.date=잘못된 날짜입니다 +typeMismatch.birthDate=잘못된 날짜입니다 +owner=소유자 +firstName=이름 +lastName=성 +address=주소 +city=도시 +telephone=전화번호 +owners=소유자 목록 +addOwner=소유자 추가 +findOwner=소유자 찾기 +findOwners=소유자들 찾기 +updateOwner=소유자 수정 +vets=수의사 +name=이름 +specialties=전문 분야 +none=없음 +pages=페이지 +first=첫 번째 +next=다음 +previous=이전 +last=마지막 +somethingHappened=문제가 발생했습니다... +pets=반려동물 +home=홈 +error=오류 +telephone.invalid=전화번호는 10자리 숫자여야 합니다 +layoutTitle=PetClinic :: Spring Framework 데모 +pet=반려동물 +birthDate=생년월일 +type=종류 +previousVisits=이전 방문 +date=날짜 +description=설명 +new=새로운 +addVisit=방문 추가 +editPet=반려동물 수정 +ownerInformation=소유자 정보 +visitDate=방문 날짜 +editOwner=소유자 수정 +addNewPet=새 반려동물 추가 +petsAndVisits=반려동물 및 방문 +error.404=요청하신 페이지를 찾을 수 없습니다. +error.500=서버 내부 오류가 발생했습니다. +error.general=알 수 없는 오류가 발생했습니다. diff --git a/src/main/resources/messages/messages_pt.properties b/src/main/resources/messages/messages_pt.properties new file mode 100644 index 0000000..7eea4b9 --- /dev/null +++ b/src/main/resources/messages/messages_pt.properties @@ -0,0 +1,51 @@ +welcome=Bem-vindo +required=E necessario +notFound=Nao foi encontrado +duplicate=Ja esta em uso +nonNumeric=Deve ser tudo numerico +duplicateFormSubmission=O envio duplicado de formulario nao e permitido +typeMismatch.date=Data invalida +typeMismatch.birthDate=Data de nascimento invalida +owner=Proprietário +firstName=Primeiro Nome +lastName=Sobrenome +address=Endereço +city=Cidade +telephone=Telefone +owners=Proprietários +addOwner=Adicionar proprietário +findOwner=Encontrar proprietário +findOwners=Encontrar proprietários +updateOwner=Atualizar proprietário +vets=Veterinários +name=Nome +specialties=Especialidades +none=nenhum +pages=páginas +first=Primeiro +next=Próximo +previous=Anterior +last=Último +somethingHappened=Algo aconteceu... +pets=Animais de estimação +home=Início +error=Erro +telephone.invalid=O número de telefone deve conter 10 dígitos +layoutTitle=PetClinic :: uma demonstração do Spring Framework +pet=Animal de estimação +birthDate=Data de nascimento +type=Tipo +previousVisits=Visitas anteriores +date=Data +description=Descrição +new=Novo +addVisit=Adicionar visita +editPet=Editar animal +ownerInformation=Informações do proprietário +visitDate=Data da visita +editOwner=Editar proprietário +addNewPet=Adicionar novo animal +petsAndVisits=Animais e visitas +error.404=A página solicitada não foi encontrada. +error.500=Ocorreu um erro interno no servidor. +error.general=Ocorreu um erro inesperado. diff --git a/src/main/resources/messages/messages_ru.properties b/src/main/resources/messages/messages_ru.properties new file mode 100644 index 0000000..f06d2cb --- /dev/null +++ b/src/main/resources/messages/messages_ru.properties @@ -0,0 +1,51 @@ +welcome=Добро пожаловать +required=необходимо +notFound=не найдено +duplicate=уже используется +nonNumeric=должно быть все числовое значение +duplicateFormSubmission=Дублирование формы не допускается +typeMismatch.date=неправильная даные +typeMismatch.birthDate=неправильная дата +owner=Владелец +firstName=Имя +lastName=Фамилия +address=Адрес +city=Город +telephone=Телефон +owners=Владельцы +addOwner=Добавить владельца +findOwner=Найти владельца +findOwners=Найти владельцев +updateOwner=Обновить владельца +vets=Ветеринары +name=Имя +specialties=Специальности +none=нет +pages=страницы +first=Первый +next=Следующий +previous=Предыдущий +last=Последний +somethingHappened=Что-то пошло не так... +pets=Питомцы +home=Главная +error=Ошибка +telephone.invalid=Телефон должен содержать 10 цифр +layoutTitle=PetClinic :: демонстрация Spring Framework +pet=Питомец +birthDate=Дата рождения +type=Тип +previousVisits=Предыдущие визиты +date=Дата +description=Описание +new=Новый +addVisit=Добавить визит +editPet=Редактировать питомца +ownerInformation=Информация о владельце +visitDate=Дата визита +editOwner=Редактировать владельца +addNewPet=Добавить нового питомца +petsAndVisits=Питомцы и визиты +error.404=Запрашиваемая страница не найдена. +error.500=Произошла внутренняя ошибка сервера. +error.general=Произошла непредвиденная ошибка. diff --git a/src/main/resources/messages/messages_tr.properties b/src/main/resources/messages/messages_tr.properties new file mode 100644 index 0000000..2c806f9 --- /dev/null +++ b/src/main/resources/messages/messages_tr.properties @@ -0,0 +1,51 @@ +welcome=hoş geldiniz +required=gerekli +notFound=bulunamadı +duplicate=zaten kullanılıyor +nonNumeric=sadece sayısal olmalıdır +duplicateFormSubmission=Formun tekrar gönderilmesine izin verilmez +typeMismatch.date=geçersiz tarih +typeMismatch.birthDate=geçersiz tarih +owner=Sahip +firstName=Ad +lastName=Soyad +address=Adres +city=Şehir +telephone=Telefon +owners=Sahipler +addOwner=Sahip Ekle +findOwner=Sahip Bul +findOwners=Sahipleri Bul +updateOwner=Sahip Güncelle +vets=Veterinerler +name=İsim +specialties=Uzmanlıklar +none=yok +pages=sayfalar +first=İlk +next=Sonraki +previous=Önceki +last=Son +somethingHappened=Bir şey oldu... +pets=Evcil Hayvanlar +home=Ana Sayfa +error=Hata +telephone.invalid=Telefon numarası 10 basamaklı olmalıdır +layoutTitle=PetClinic :: bir Spring Framework demosu +pet=Evcil Hayvan +birthDate=Doğum Tarihi +type=Tür +previousVisits=Önceki Ziyaretler +date=Tarih +description=Açıklama +new=Yeni +addVisit=Ziyaret Ekle +editPet=Evcil Hayvanı Düzenle +ownerInformation=Sahip Bilgileri +visitDate=Ziyaret Tarihi +editOwner=Sahibi Düzenle +addNewPet=Yeni Evcil Hayvan Ekle +petsAndVisits=Evcil Hayvanlar ve Ziyaretler +error.404=İstenen sayfa bulunamadı. +error.500=Sunucuda dahili bir hata oluştu. +error.general=Beklenmeyen bir hata oluştu. diff --git a/src/main/resources/static/resources/css/petclinic.css b/src/main/resources/static/resources/css/petclinic.css new file mode 100644 index 0000000..4b701b1 --- /dev/null +++ b/src/main/resources/static/resources/css/petclinic.css @@ -0,0 +1,9532 @@ +/* + * Copyright 2016 the original author or authors. + * + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*! + * Bootstrap v5.3.8 (https://getbootstrap.com/) + * Copyright 2011-2025 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root, +[data-bs-theme="light"] { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-primary-text-emphasis: #052c65; + --bs-secondary-text-emphasis: #2b2f32; + --bs-success-text-emphasis: #0a3622; + --bs-info-text-emphasis: #055160; + --bs-warning-text-emphasis: #664d03; + --bs-danger-text-emphasis: #58151c; + --bs-light-text-emphasis: #495057; + --bs-dark-text-emphasis: #495057; + --bs-primary-bg-subtle: #cfe2ff; + --bs-secondary-bg-subtle: #e2e3e5; + --bs-success-bg-subtle: #d1e7dd; + --bs-info-bg-subtle: #cff4fc; + --bs-warning-bg-subtle: #fff3cd; + --bs-danger-bg-subtle: #f8d7da; + --bs-light-bg-subtle: #fcfcfd; + --bs-dark-bg-subtle: #ced4da; + --bs-primary-border-subtle: #9ec5fe; + --bs-secondary-border-subtle: #c4c8cb; + --bs-success-border-subtle: #a3cfbb; + --bs-info-border-subtle: #9eeaf9; + --bs-warning-border-subtle: #ffe69c; + --bs-danger-border-subtle: #f1aeb5; + --bs-light-border-subtle: #e9ecef; + --bs-dark-border-subtle: #adb5bd; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg: #fff; + --bs-body-bg-rgb: 255, 255, 255; + --bs-emphasis-color: #000; + --bs-emphasis-color-rgb: 0, 0, 0; + --bs-secondary-color: rgba(33, 37, 41, 0.75); + --bs-secondary-color-rgb: 33, 37, 41; + --bs-secondary-bg: #e9ecef; + --bs-secondary-bg-rgb: 233, 236, 239; + --bs-tertiary-color: rgba(33, 37, 41, 0.5); + --bs-tertiary-color-rgb: 33, 37, 41; + --bs-tertiary-bg: #f8f9fa; + --bs-tertiary-bg-rgb: 248, 249, 250; + --bs-heading-color: inherit; + --bs-link-color: #0d6efd; + --bs-link-color-rgb: 13, 110, 253; + --bs-link-decoration: underline; + --bs-link-hover-color: #0a58ca; + --bs-link-hover-color-rgb: 10, 88, 202; + --bs-code-color: #d63384; + --bs-highlight-color: #212529; + --bs-highlight-bg: #fff3cd; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-xxl: 2rem; + --bs-border-radius-2xl: var(--bs-border-radius-xxl); + --bs-border-radius-pill: 50rem; + --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); + --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-focus-ring-width: 0.25rem; + --bs-focus-ring-opacity: 0.25; + --bs-focus-ring-color: rgba(13, 110, 253, 0.25); + --bs-form-valid-color: #198754; + --bs-form-valid-border-color: #198754; + --bs-form-invalid-color: #dc3545; + --bs-form-invalid-border-color: #dc3545; } + +[data-bs-theme="dark"] { + color-scheme: dark; + --bs-body-color: #dee2e6; + --bs-body-color-rgb: 222, 226, 230; + --bs-body-bg: #212529; + --bs-body-bg-rgb: 33, 37, 41; + --bs-emphasis-color: #fff; + --bs-emphasis-color-rgb: 255, 255, 255; + --bs-secondary-color: rgba(222, 226, 230, 0.75); + --bs-secondary-color-rgb: 222, 226, 230; + --bs-secondary-bg: #343a40; + --bs-secondary-bg-rgb: 52, 58, 64; + --bs-tertiary-color: rgba(222, 226, 230, 0.5); + --bs-tertiary-color-rgb: 222, 226, 230; + --bs-tertiary-bg: #2b3035; + --bs-tertiary-bg-rgb: 43, 48, 53; + --bs-primary-text-emphasis: #6ea8fe; + --bs-secondary-text-emphasis: #a7acb1; + --bs-success-text-emphasis: #75b798; + --bs-info-text-emphasis: #6edff6; + --bs-warning-text-emphasis: #ffda6a; + --bs-danger-text-emphasis: #ea868f; + --bs-light-text-emphasis: #f8f9fa; + --bs-dark-text-emphasis: #dee2e6; + --bs-primary-bg-subtle: #031633; + --bs-secondary-bg-subtle: #161719; + --bs-success-bg-subtle: #051b11; + --bs-info-bg-subtle: #032830; + --bs-warning-bg-subtle: #332701; + --bs-danger-bg-subtle: #2c0b0e; + --bs-light-bg-subtle: #343a40; + --bs-dark-bg-subtle: #1a1d20; + --bs-primary-border-subtle: #084298; + --bs-secondary-border-subtle: #41464b; + --bs-success-border-subtle: #0f5132; + --bs-info-border-subtle: #087990; + --bs-warning-border-subtle: #997404; + --bs-danger-border-subtle: #842029; + --bs-light-border-subtle: #495057; + --bs-dark-border-subtle: #343a40; + --bs-heading-color: inherit; + --bs-link-color: #6ea8fe; + --bs-link-hover-color: #8bb9fe; + --bs-link-color-rgb: 110, 168, 254; + --bs-link-hover-color-rgb: 139, 185, 254; + --bs-code-color: #e685b5; + --bs-highlight-color: #dee2e6; + --bs-highlight-bg: #664d03; + --bs-border-color: #495057; + --bs-border-color-translucent: rgba(255, 255, 255, 0.15); + --bs-form-valid-color: #75b798; + --bs-form-valid-border-color: #75b798; + --bs-form-invalid-color: #ea868f; + --bs-form-invalid-border-color: #ea868f; } + +*, +*::before, +*::after { + box-sizing: border-box; } + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; } } + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: var(--bs-border-width) solid; + opacity: 0.25; } + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + color: var(--bs-heading-color); } + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); } + @media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; } } +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); } + @media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; } } +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); } + @media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; } } +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); } + @media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; } } +h5, .h5 { + font-size: 1.25rem; } + +h6, .h6 { + font-size: 1rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title] { + text-decoration: underline dotted; + cursor: help; + text-decoration-skip-ink: none; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } + +ol, +ul { + padding-left: 2rem; } + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +b, +strong { + font-weight: bolder; } + +small, .small { + font-size: 0.875em; } + +mark, .mark { + padding: 0.1875em; + color: var(--bs-highlight-color); + background-color: var(--bs-highlight-bg); } + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -.25em; } + +sup { + top: -.5em; } + +a { + color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); + text-decoration: underline; } + a:hover { + --bs-link-color-rgb: var(--bs-link-hover-color-rgb); } + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; } + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; } + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; } + pre code { + font-size: inherit; + color: inherit; + word-break: normal; } + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; } + a > code { + color: inherit; } + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; } + kbd kbd { + padding: 0; + font-size: 1em; } + +figure { + margin: 0 0 1rem; } + +img, +svg { + vertical-align: middle; } + +table { + caption-side: bottom; + border-collapse: collapse; } + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-secondary-color); + text-align: left; } + +th { + text-align: inherit; + text-align: -webkit-match-parent; } + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; } + +label { + display: inline-block; } + +button { + border-radius: 0; } + +button:focus:not(:focus-visible) { + outline: 0; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +select { + text-transform: none; } + +[role="button"] { + cursor: pointer; } + +select { + word-wrap: normal; } + select:disabled { + opacity: 1; } + +[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator { + display: none !important; } + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + button:not(:disabled), + [type="button"]:not(:disabled), + [type="reset"]:not(:disabled), + [type="submit"]:not(:disabled) { + cursor: pointer; } + +::-moz-focus-inner { + padding: 0; + border-style: none; } + +textarea { + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + line-height: inherit; + font-size: calc(1.275rem + 0.3vw); } + @media (min-width: 1200px) { + legend { + font-size: 1.5rem; } } + legend + * { + clear: left; } + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; } + +::-webkit-inner-spin-button { + height: auto; } + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; } + [type="search"]::-webkit-search-cancel-button { + cursor: pointer; + filter: grayscale(1); } + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-color-swatch-wrapper { + padding: 0; } + +::file-selector-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +iframe { + border: 0; } + +summary { + display: list-item; + cursor: pointer; } + +progress { + vertical-align: baseline; } + +[hidden] { + display: none !important; } + +.lead { + font-size: 1.25rem; + font-weight: 300; } + +.display-1 { + font-weight: 300; + line-height: 1.2; + font-size: calc(1.625rem + 4.5vw); } + @media (min-width: 1200px) { + .display-1 { + font-size: 5rem; } } +.display-2 { + font-weight: 300; + line-height: 1.2; + font-size: calc(1.575rem + 3.9vw); } + @media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; } } +.display-3 { + font-weight: 300; + line-height: 1.2; + font-size: calc(1.525rem + 3.3vw); } + @media (min-width: 1200px) { + .display-3 { + font-size: 4rem; } } +.display-4 { + font-weight: 300; + line-height: 1.2; + font-size: calc(1.475rem + 2.7vw); } + @media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; } } +.display-5 { + font-weight: 300; + line-height: 1.2; + font-size: calc(1.425rem + 2.1vw); } + @media (min-width: 1200px) { + .display-5 { + font-size: 3rem; } } +.display-6 { + font-weight: 300; + line-height: 1.2; + font-size: calc(1.375rem + 1.5vw); } + @media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; } } +.list-unstyled { + padding-left: 0; + list-style: none; } + +.list-inline { + padding-left: 0; + list-style: none; } + +.list-inline-item { + display: inline-block; } + .list-inline-item:not(:last-child) { + margin-right: 0.5rem; } + +.initialism { + font-size: 0.875em; + text-transform: uppercase; } + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; } + .blockquote > :last-child { + margin-bottom: 0; } + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; } + .blockquote-footer::before { + content: "\2014\00A0"; } + +.img-fluid { + max-width: 100%; + height: auto; } + +.img-thumbnail { + padding: 0.25rem; + background-color: var(--bs-body-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + max-width: 100%; + height: auto; } + +.figure { + display: inline-block; } + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; } + +.figure-caption { + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-right: auto; + margin-left: auto; } + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; } } + +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; } } + +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; } } + +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; } } + +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; } } + +:root { + --bs-breakpoint-xs: 0; + --bs-breakpoint-sm: 576px; + --bs-breakpoint-md: 768px; + --bs-breakpoint-lg: 992px; + --bs-breakpoint-xl: 1200px; + --bs-breakpoint-xxl: 1400px; } + +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-.5 * var(--bs-gutter-x)); + margin-left: calc(-.5 * var(--bs-gutter-x)); } + .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-top: var(--bs-gutter-y); } + +.col { + flex: 1 0 0; } + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; } + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; } + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; } + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333%; } + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; } + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; } + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.66667%; } + +.col-auto { + flex: 0 0 auto; + width: auto; } + +.col-1 { + flex: 0 0 auto; + width: 8.33333%; } + +.col-2 { + flex: 0 0 auto; + width: 16.66667%; } + +.col-3 { + flex: 0 0 auto; + width: 25%; } + +.col-4 { + flex: 0 0 auto; + width: 33.33333%; } + +.col-5 { + flex: 0 0 auto; + width: 41.66667%; } + +.col-6 { + flex: 0 0 auto; + width: 50%; } + +.col-7 { + flex: 0 0 auto; + width: 58.33333%; } + +.col-8 { + flex: 0 0 auto; + width: 66.66667%; } + +.col-9 { + flex: 0 0 auto; + width: 75%; } + +.col-10 { + flex: 0 0 auto; + width: 83.33333%; } + +.col-11 { + flex: 0 0 auto; + width: 91.66667%; } + +.col-12 { + flex: 0 0 auto; + width: 100%; } + +.offset-1 { + margin-left: 8.33333%; } + +.offset-2 { + margin-left: 16.66667%; } + +.offset-3 { + margin-left: 25%; } + +.offset-4 { + margin-left: 33.33333%; } + +.offset-5 { + margin-left: 41.66667%; } + +.offset-6 { + margin-left: 50%; } + +.offset-7 { + margin-left: 58.33333%; } + +.offset-8 { + margin-left: 66.66667%; } + +.offset-9 { + margin-left: 75%; } + +.offset-10 { + margin-left: 83.33333%; } + +.offset-11 { + margin-left: 91.66667%; } + +.g-0, +.gx-0 { + --bs-gutter-x: 0; } + +.g-0, +.gy-0 { + --bs-gutter-y: 0; } + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; } + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; } + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; } + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; } + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; } + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; } + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; } + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; } + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; } + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; } + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0; } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.33333%; } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.66667%; } + .col-sm-auto { + flex: 0 0 auto; + width: auto; } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; } + .offset-sm-0 { + margin-left: 0; } + .offset-sm-1 { + margin-left: 8.33333%; } + .offset-sm-2 { + margin-left: 16.66667%; } + .offset-sm-3 { + margin-left: 25%; } + .offset-sm-4 { + margin-left: 33.33333%; } + .offset-sm-5 { + margin-left: 41.66667%; } + .offset-sm-6 { + margin-left: 50%; } + .offset-sm-7 { + margin-left: 58.33333%; } + .offset-sm-8 { + margin-left: 66.66667%; } + .offset-sm-9 { + margin-left: 75%; } + .offset-sm-10 { + margin-left: 83.33333%; } + .offset-sm-11 { + margin-left: 91.66667%; } + .g-sm-0, + .gx-sm-0 { + --bs-gutter-x: 0; } + .g-sm-0, + .gy-sm-0 { + --bs-gutter-y: 0; } + .g-sm-1, + .gx-sm-1 { + --bs-gutter-x: 0.25rem; } + .g-sm-1, + .gy-sm-1 { + --bs-gutter-y: 0.25rem; } + .g-sm-2, + .gx-sm-2 { + --bs-gutter-x: 0.5rem; } + .g-sm-2, + .gy-sm-2 { + --bs-gutter-y: 0.5rem; } + .g-sm-3, + .gx-sm-3 { + --bs-gutter-x: 1rem; } + .g-sm-3, + .gy-sm-3 { + --bs-gutter-y: 1rem; } + .g-sm-4, + .gx-sm-4 { + --bs-gutter-x: 1.5rem; } + .g-sm-4, + .gy-sm-4 { + --bs-gutter-y: 1.5rem; } + .g-sm-5, + .gx-sm-5 { + --bs-gutter-x: 3rem; } + .g-sm-5, + .gy-sm-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 768px) { + .col-md { + flex: 1 0 0; } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.33333%; } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.66667%; } + .col-md-auto { + flex: 0 0 auto; + width: auto; } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-md-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-md-3 { + flex: 0 0 auto; + width: 25%; } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-md-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-md-6 { + flex: 0 0 auto; + width: 50%; } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-md-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-md-9 { + flex: 0 0 auto; + width: 75%; } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-md-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-md-12 { + flex: 0 0 auto; + width: 100%; } + .offset-md-0 { + margin-left: 0; } + .offset-md-1 { + margin-left: 8.33333%; } + .offset-md-2 { + margin-left: 16.66667%; } + .offset-md-3 { + margin-left: 25%; } + .offset-md-4 { + margin-left: 33.33333%; } + .offset-md-5 { + margin-left: 41.66667%; } + .offset-md-6 { + margin-left: 50%; } + .offset-md-7 { + margin-left: 58.33333%; } + .offset-md-8 { + margin-left: 66.66667%; } + .offset-md-9 { + margin-left: 75%; } + .offset-md-10 { + margin-left: 83.33333%; } + .offset-md-11 { + margin-left: 91.66667%; } + .g-md-0, + .gx-md-0 { + --bs-gutter-x: 0; } + .g-md-0, + .gy-md-0 { + --bs-gutter-y: 0; } + .g-md-1, + .gx-md-1 { + --bs-gutter-x: 0.25rem; } + .g-md-1, + .gy-md-1 { + --bs-gutter-y: 0.25rem; } + .g-md-2, + .gx-md-2 { + --bs-gutter-x: 0.5rem; } + .g-md-2, + .gy-md-2 { + --bs-gutter-y: 0.5rem; } + .g-md-3, + .gx-md-3 { + --bs-gutter-x: 1rem; } + .g-md-3, + .gy-md-3 { + --bs-gutter-y: 1rem; } + .g-md-4, + .gx-md-4 { + --bs-gutter-x: 1.5rem; } + .g-md-4, + .gy-md-4 { + --bs-gutter-y: 1.5rem; } + .g-md-5, + .gx-md-5 { + --bs-gutter-x: 3rem; } + .g-md-5, + .gy-md-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0; } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.33333%; } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.66667%; } + .col-lg-auto { + flex: 0 0 auto; + width: auto; } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; } + .offset-lg-0 { + margin-left: 0; } + .offset-lg-1 { + margin-left: 8.33333%; } + .offset-lg-2 { + margin-left: 16.66667%; } + .offset-lg-3 { + margin-left: 25%; } + .offset-lg-4 { + margin-left: 33.33333%; } + .offset-lg-5 { + margin-left: 41.66667%; } + .offset-lg-6 { + margin-left: 50%; } + .offset-lg-7 { + margin-left: 58.33333%; } + .offset-lg-8 { + margin-left: 66.66667%; } + .offset-lg-9 { + margin-left: 75%; } + .offset-lg-10 { + margin-left: 83.33333%; } + .offset-lg-11 { + margin-left: 91.66667%; } + .g-lg-0, + .gx-lg-0 { + --bs-gutter-x: 0; } + .g-lg-0, + .gy-lg-0 { + --bs-gutter-y: 0; } + .g-lg-1, + .gx-lg-1 { + --bs-gutter-x: 0.25rem; } + .g-lg-1, + .gy-lg-1 { + --bs-gutter-y: 0.25rem; } + .g-lg-2, + .gx-lg-2 { + --bs-gutter-x: 0.5rem; } + .g-lg-2, + .gy-lg-2 { + --bs-gutter-y: 0.5rem; } + .g-lg-3, + .gx-lg-3 { + --bs-gutter-x: 1rem; } + .g-lg-3, + .gy-lg-3 { + --bs-gutter-y: 1rem; } + .g-lg-4, + .gx-lg-4 { + --bs-gutter-x: 1.5rem; } + .g-lg-4, + .gy-lg-4 { + --bs-gutter-y: 1.5rem; } + .g-lg-5, + .gx-lg-5 { + --bs-gutter-x: 3rem; } + .g-lg-5, + .gy-lg-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0; } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.33333%; } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.66667%; } + .col-xl-auto { + flex: 0 0 auto; + width: auto; } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xl-0 { + margin-left: 0; } + .offset-xl-1 { + margin-left: 8.33333%; } + .offset-xl-2 { + margin-left: 16.66667%; } + .offset-xl-3 { + margin-left: 25%; } + .offset-xl-4 { + margin-left: 33.33333%; } + .offset-xl-5 { + margin-left: 41.66667%; } + .offset-xl-6 { + margin-left: 50%; } + .offset-xl-7 { + margin-left: 58.33333%; } + .offset-xl-8 { + margin-left: 66.66667%; } + .offset-xl-9 { + margin-left: 75%; } + .offset-xl-10 { + margin-left: 83.33333%; } + .offset-xl-11 { + margin-left: 91.66667%; } + .g-xl-0, + .gx-xl-0 { + --bs-gutter-x: 0; } + .g-xl-0, + .gy-xl-0 { + --bs-gutter-y: 0; } + .g-xl-1, + .gx-xl-1 { + --bs-gutter-x: 0.25rem; } + .g-xl-1, + .gy-xl-1 { + --bs-gutter-y: 0.25rem; } + .g-xl-2, + .gx-xl-2 { + --bs-gutter-x: 0.5rem; } + .g-xl-2, + .gy-xl-2 { + --bs-gutter-y: 0.5rem; } + .g-xl-3, + .gx-xl-3 { + --bs-gutter-x: 1rem; } + .g-xl-3, + .gy-xl-3 { + --bs-gutter-y: 1rem; } + .g-xl-4, + .gx-xl-4 { + --bs-gutter-x: 1.5rem; } + .g-xl-4, + .gy-xl-4 { + --bs-gutter-y: 1.5rem; } + .g-xl-5, + .gx-xl-5 { + --bs-gutter-x: 3rem; } + .g-xl-5, + .gy-xl-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0; } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.33333%; } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.66667%; } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xxl-0 { + margin-left: 0; } + .offset-xxl-1 { + margin-left: 8.33333%; } + .offset-xxl-2 { + margin-left: 16.66667%; } + .offset-xxl-3 { + margin-left: 25%; } + .offset-xxl-4 { + margin-left: 33.33333%; } + .offset-xxl-5 { + margin-left: 41.66667%; } + .offset-xxl-6 { + margin-left: 50%; } + .offset-xxl-7 { + margin-left: 58.33333%; } + .offset-xxl-8 { + margin-left: 66.66667%; } + .offset-xxl-9 { + margin-left: 75%; } + .offset-xxl-10 { + margin-left: 83.33333%; } + .offset-xxl-11 { + margin-left: 91.66667%; } + .g-xxl-0, + .gx-xxl-0 { + --bs-gutter-x: 0; } + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; } + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; } + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; } + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; } + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; } + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; } + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; } + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; } + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; } + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; } + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; } } + +.table { + --bs-table-color-type: initial; + --bs-table-bg-type: initial; + --bs-table-color-state: initial; + --bs-table-bg-state: initial; + --bs-table-color: var(--bs-emphasis-color); + --bs-table-bg: var(--bs-body-bg); + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-emphasis-color); + --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05); + --bs-table-active-color: var(--bs-emphasis-color); + --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1); + --bs-table-hover-color: var(--bs-emphasis-color); + --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075); + width: 100%; + margin-bottom: 1rem; + vertical-align: top; + border-color: var(--bs-table-border-color); } + .table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color))); + background-color: var(--bs-table-bg); + border-bottom-width: var(--bs-border-width); + box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg))); } + .table > tbody { + vertical-align: inherit; } + .table > thead { + vertical-align: bottom; } + +.table-group-divider { + border-top: calc(var(--bs-border-width) * 2) solid currentcolor; } + +.caption-top { + caption-side: top; } + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; } + +.table-bordered > :not(caption) > * { + border-width: var(--bs-border-width) 0; } + .table-bordered > :not(caption) > * > * { + border-width: 0 var(--bs-border-width); } + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; } + +.table-borderless > :not(:first-child) { + border-top-width: 0; } + +.table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); } + +.table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); } + +.table-active { + --bs-table-color-state: var(--bs-table-active-color); + --bs-table-bg-state: var(--bs-table-active-bg); } + +.table-hover > tbody > tr:hover > * { + --bs-table-color-state: var(--bs-table-hover-color); + --bs-table-bg-state: var(--bs-table-hover-bg); } + +.table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #a6b5cc; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #b5b6b7; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #a7b9b1; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #a6c3ca; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #ccc2a4; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #c6acae; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #c6c7c8; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #4d5154; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +.form-label { + margin-bottom: 0.5rem; } + +.col-form-label { + padding-top: calc(0.375rem + var(--bs-border-width)); + padding-bottom: calc(0.375rem + var(--bs-border-width)); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; } + +.col-form-label-lg { + padding-top: calc(0.5rem + var(--bs-border-width)); + padding-bottom: calc(0.5rem + var(--bs-border-width)); + font-size: 1.25rem; } + +.col-form-label-sm { + padding-top: calc(0.25rem + var(--bs-border-width)); + padding-bottom: calc(0.25rem + var(--bs-border-width)); + font-size: 0.875rem; } + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-clip: padding-box; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; } } + .form-control[type="file"] { + overflow: hidden; } + .form-control[type="file"]:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control:focus { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-control::-webkit-date-and-time-value { + min-width: 85px; + height: 1.5em; + margin: 0; } + .form-control::-webkit-datetime-edit { + display: block; + padding: 0; } + .form-control::placeholder { + color: var(--bs-secondary-color); + opacity: 1; } + .form-control:disabled { + background-color: var(--bs-secondary-bg); + opacity: 1; } + .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + margin-inline-end: 0.75rem; + color: var(--bs-body-color); + background-color: var(--bs-tertiary-bg); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: var(--bs-border-width); + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; } } + .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--bs-secondary-bg); } + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: var(--bs-body-color); + background-color: transparent; + border: solid transparent; + border-width: var(--bs-border-width) 0; } + .form-control-plaintext:focus { + outline: 0; } + .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; } + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + margin-inline-end: 0.5rem; } + +.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + margin-inline-end: 1rem; } + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); } + +.form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); + padding: 0.375rem; } + .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); } + .form-control-color::-webkit-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); } + .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); } + .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); } + +.form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; } } + .form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; } + .form-select:disabled { + background-color: var(--bs-secondary-bg); } + .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--bs-body-color); } + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +[data-bs-theme="dark"] .form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); } + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; } + .form-check .form-check-input { + float: left; + margin-left: -1.5em; } + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; } + .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; } + +.form-check-input { + --bs-form-check-bg: var(--bs-body-bg); + flex-shrink: 0; + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + appearance: none; + background-color: var(--bs-form-check-bg); + background-image: var(--bs-form-check-bg-image); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--bs-border-width) solid var(--bs-border-color); + print-color-adjust: exact; } + .form-check-input[type="checkbox"] { + border-radius: 0.25em; } + .form-check-input[type="radio"] { + border-radius: 50%; } + .form-check-input:active { + filter: brightness(90%); } + .form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; } + .form-check-input:checked[type="checkbox"] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); } + .form-check-input:checked[type="radio"] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); } + .form-check-input[type="checkbox"]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); } + .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; } + .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; } + +.form-switch { + padding-left: 2.5em; } + .form-switch .form-check-input { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + width: 2em; + margin-left: -2.5em; + background-image: var(--bs-form-switch-bg); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; } } + .form-switch .form-check-input:focus { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); } + .form-switch .form-check-input:checked { + background-position: right center; + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } + .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; } + .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; } + +.form-check-inline { + display: inline-block; + margin-right: 1rem; } + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; } + .btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; } + +[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus) { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e"); } + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + appearance: none; + background-color: transparent; } + .form-range:focus { + outline: 0; } + .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-range::-moz-focus-outer { + border: 0; } + .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + transition: none; } } + .form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; } + .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; } + .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + transition: none; } } + .form-range::-moz-range-thumb:active { + background-color: #b6d4fe; } + .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; } + .form-range:disabled { + pointer-events: none; } + .form-range:disabled::-webkit-slider-thumb { + background-color: var(--bs-secondary-color); } + .form-range:disabled::-moz-range-thumb { + background-color: var(--bs-secondary-color); } + +.form-floating { + position: relative; } + .form-floating > .form-control, + .form-floating > .form-control-plaintext, + .form-floating > .form-select { + height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + min-height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + line-height: 1.25; } + .form-floating > label { + position: absolute; + top: 0; + left: 0; + z-index: 2; + max-width: 100%; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + color: rgba(var(--bs-body-color-rgb), 0.65); + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: var(--bs-border-width) solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; } } + .form-floating > .form-control, + .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; } + .form-floating > .form-control::placeholder, + .form-floating > .form-control-plaintext::placeholder { + color: transparent; } + .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), + .form-floating > .form-control-plaintext:focus, + .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:-webkit-autofill, + .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; + padding-left: 0.75rem; } + .form-floating > .form-control:focus ~ label, + .form-floating > .form-control:not(:placeholder-shown) ~ label, + .form-floating > .form-control-plaintext ~ label, + .form-floating > .form-select ~ label { + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control:-webkit-autofill ~ label { + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > textarea:focus ~ label::after, + .form-floating > textarea:not(:placeholder-shown) ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--bs-body-bg); + border-radius: var(--bs-border-radius); } + .form-floating > textarea:disabled ~ label::after { + background-color: var(--bs-secondary-bg); } + .form-floating > .form-control-plaintext ~ label { + border-width: var(--bs-border-width) 0; } + .form-floating > :disabled ~ label, + .form-floating > .form-control:disabled ~ label { + color: #6c757d; } + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; } + .input-group > .form-control, + .input-group > .form-select, + .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; } + .input-group > .form-control:focus, + .input-group > .form-select:focus, + .input-group > .form-floating:focus-within { + z-index: 5; } + .input-group .btn { + position: relative; + z-index: 2; } + .input-group .btn:focus { + z-index: 5; } + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-tertiary-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); } + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; } + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3), +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4), +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-control, +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: calc(-1 * var(--bs-border-width)); + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.input-group > .form-floating:not(:first-child) > .form-control, +.input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-valid-color); } + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-success); + border-radius: var(--bs-border-radius); } + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: var(--bs-form-valid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: var(--bs-form-valid-color); } + .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: var(--bs-form-valid-color); } + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid, .was-validated .input-group > .form-select:not(:focus):valid, +.input-group > .form-select:not(:focus).is-valid, .was-validated .input-group > .form-floating:not(:focus-within):valid, +.input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; } + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-invalid-color); } + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-danger); + border-radius: var(--bs-border-radius); } + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: var(--bs-form-invalid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: var(--bs-form-invalid-color); } + .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: var(--bs-form-invalid-color); } + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid, .was-validated .input-group > .form-select:not(:focus):invalid, +.input-group > .form-select:not(:focus).is-invalid, .was-validated .input-group > .form-floating:not(:focus-within):invalid, +.input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; } + +.btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-family: ; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: var(--bs-body-color); + --bs-btn-bg: transparent; + --bs-btn-border-width: var(--bs-border-width); + --bs-btn-border-color: transparent; + --bs-btn-border-radius: var(--bs-border-radius); + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .btn { + transition: none; } } + .btn:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); } + .btn-check + .btn:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); } + .btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); } + .btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn-check:checked:focus-visible + .btn { + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn:disabled, .btn.disabled, fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); } + +.btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; } + +.btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; } + +.btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; } + +.btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; } + +.btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; } + +.btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; } + +.btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; } + +.btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; } + +.btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; } + +.btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; } + +.btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; } + +.btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; } + +.btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; } + +.btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; } + +.btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; } + +.btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; } + +.btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: 0 0 0 #000; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; } + .btn-link:focus-visible { + color: var(--bs-btn-color); } + .btn-link:hover { + color: var(--bs-btn-hover-color); } + +.btn-lg, .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: var(--bs-border-radius-lg); } + +.btn-sm, .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: var(--bs-border-radius-sm); } + +.fade { + transition: opacity 0.15s linear; } + @media (prefers-reduced-motion: reduce) { + .fade { + transition: none; } } + .fade:not(.show) { + opacity: 0; } + +.collapse:not(.show) { + display: none; } + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; } } + .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; } } +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; } + +.dropdown-toggle { + white-space: nowrap; } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: var(--bs-body-color); + --bs-dropdown-bg: var(--bs-body-bg); + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: var(--bs-border-radius); + --bs-dropdown-border-width: var(--bs-border-width); + --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width)); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: var(--bs-box-shadow); + --bs-dropdown-link-color: var(--bs-body-color); + --bs-dropdown-link-hover-color: var(--bs-body-color); + --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: var(--bs-tertiary-color); + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); } + .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); } + +.dropdown-menu-start { + --bs-position: start; } + .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; } + +.dropdown-menu-end { + --bs-position: end; } + .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; } + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-sm-end { + --bs-position: end; } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-md-end { + --bs-position: end; } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-lg-end { + --bs-position: end; } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-xl-end { + --bs-position: end; } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-xxl-end { + --bs-position: end; } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; } } + +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); } + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; } + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); } + +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; } + +.dropend .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-toggle::after { + vertical-align: 0; } + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); } + +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; } + +.dropstart .dropdown-toggle::after { + display: none; } + +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; } + +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropstart .dropdown-toggle::before { + vertical-align: 0; } + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; } + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; + border-radius: var(--bs-dropdown-item-border-radius, 0); } + .dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); } + .dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); } + .dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; } + +.dropdown-menu.show { + display: block; } + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; } + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); } + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; } + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; } + .btn-group > .btn, + .btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; } + .btn-group > .btn-check:checked + .btn, + .btn-group > .btn-check:focus + .btn, + .btn-group > .btn:hover, + .btn-group > .btn:focus, + .btn-group > .btn:active, + .btn-group > .btn.active, + .btn-group-vertical > .btn-check:checked + .btn, + .btn-group-vertical > .btn-check:focus + .btn, + .btn-group-vertical > .btn:hover, + .btn-group-vertical > .btn:focus, + .btn-group-vertical > .btn:active, + .btn-group-vertical > .btn.active { + z-index: 1; } + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .btn-toolbar .input-group { + width: auto; } + +.btn-group { + border-radius: var(--bs-border-radius); } + .btn-group > :not(.btn-check:first-child) + .btn, + .btn-group > .btn-group:not(:first-child) { + margin-left: calc(-1 * var(--bs-border-width)); } + .btn-group > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group > .btn.dropdown-toggle-split:first-child, + .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .btn-group > .btn:nth-child(n + 3), + .btn-group > :not(.btn-check) + .btn, + .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; } + .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; } + .dropstart .dropdown-toggle-split::before { + margin-right: 0; } + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; } + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; } + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; } + .btn-group-vertical > .btn, + .btn-group-vertical > .btn-group { + width: 100%; } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: calc(-1 * var(--bs-border-width)); } + .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .btn-group-vertical > .btn:nth-child(n + 3), + .btn-group-vertical > :not(.btn-check) + .btn, + .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + +.nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + background: none; + border: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; } } + .nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); } + .nav-link:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .nav-link.disabled, .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; } + +.nav-tabs { + --bs-nav-tabs-border-width: var(--bs-border-width); + --bs-nav-tabs-border-color: var(--bs-border-color); + --bs-nav-tabs-border-radius: var(--bs-border-radius); + --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color); + --bs-nav-tabs-link-active-color: var(--bs-emphasis-color); + --bs-nav-tabs-link-active-bg: var(--bs-body-bg); + --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg); + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); } + .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); } + .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); } + .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav-pills { + --bs-nav-pills-border-radius: var(--bs-border-radius); + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; } + .nav-pills .nav-link { + border-radius: var(--bs-nav-pills-border-radius); } + .nav-pills .nav-link.active, + .nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); } + +.nav-underline { + --bs-nav-underline-gap: 1rem; + --bs-nav-underline-border-width: 0.125rem; + --bs-nav-underline-link-active-color: var(--bs-emphasis-color); + gap: var(--bs-nav-underline-gap); } + .nav-underline .nav-link { + padding-right: 0; + padding-left: 0; + border-bottom: var(--bs-nav-underline-border-width) solid transparent; } + .nav-underline .nav-link:hover, .nav-underline .nav-link:focus { + border-bottom-color: currentcolor; } + .nav-underline .nav-link.active, + .nav-underline .show > .nav-link { + font-weight: 700; + color: var(--bs-nav-underline-link-active-color); + border-bottom-color: currentcolor; } + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; } + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-grow: 1; + flex-basis: 0; + text-align: center; } + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; } + +.tab-content > .tab-pane { + display: none; } + +.tab-content > .active { + display: block; } + +.navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65); + --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8); + --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3); + --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15); + --bs-navbar-toggler-border-radius: var(--bs-border-radius); + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); } + .navbar > .container, + .navbar > .container-fluid, + .navbar > .container-sm, + .navbar > .container-md, + .navbar > .container-lg, + .navbar > .container-xl, + .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; } + +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; } + .navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); } + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + .navbar-nav .nav-link.active, .navbar-nav .nav-link.show { + color: var(--bs-navbar-active-color); } + .navbar-nav .dropdown-menu { + position: static; } + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); } + .navbar-text a, + .navbar-text a:hover, + .navbar-text a:focus { + color: var(--bs-navbar-active-color); } + +.navbar-collapse { + flex-grow: 1; + flex-basis: 100%; + align-items: center; } + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); } + @media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; } } + .navbar-toggler:hover { + text-decoration: none; } + .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); } + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; } + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; } + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-sm .navbar-nav { + flex-direction: row; } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-sm .navbar-toggler { + display: none; } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-md .navbar-nav { + flex-direction: row; } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-md .navbar-toggler { + display: none; } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-lg .navbar-nav { + flex-direction: row; } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-lg .navbar-toggler { + display: none; } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xl .navbar-nav { + flex-direction: row; } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xl .navbar-toggler { + display: none; } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xxl .navbar-toggler { + display: none; } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand .navbar-nav { + flex-direction: row; } + .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand .navbar-nav-scroll { + overflow: visible; } + .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand .navbar-toggler { + display: none; } + .navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand .offcanvas .offcanvas-header { + display: none; } + .navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } + +.navbar-dark, +.navbar[data-bs-theme="dark"] { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +[data-bs-theme="dark"] .navbar-toggler-icon { + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +.card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-title-color: ; + --bs-card-subtitle-color: ; + --bs-card-border-width: var(--bs-border-width); + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: var(--bs-border-radius); + --bs-card-box-shadow: ; + --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); + --bs-card-cap-color: ; + --bs-card-height: ; + --bs-card-color: ; + --bs-card-bg: var(--bs-body-bg); + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + color: var(--bs-body-color); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); } + .card > hr { + margin-right: 0; + margin-left: 0; } + .card > .list-group { + border-top: inherit; + border-bottom: inherit; } + .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + .card > .card-header + .list-group, + .card > .list-group + .card-footer { + border-top: 0; } + +.card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); } + +.card-title { + margin-bottom: var(--bs-card-title-spacer-y); + color: var(--bs-card-title-color); } + +.card-subtitle { + margin-top: calc(-.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; + color: var(--bs-card-subtitle-color); } + +.card-text:last-child { + margin-bottom: 0; } + +.card-link + .card-link { + margin-left: var(--bs-card-spacer-x); } + +.card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); } + .card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; } + +.card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); } + .card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); } + +.card-header-tabs { + margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; } + .card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); } + +.card-header-pills { + margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); } + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; } + +.card-img, +.card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + +.card-group > .card { + margin-bottom: var(--bs-card-group-margin); } + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; } + .card-group > .card { + flex: 1 0 0; + margin-bottom: 0; } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .card-group > .card:not(:last-child) > .card-img-top, + .card-group > .card:not(:last-child) > .card-header { + border-top-right-radius: 0; } + .card-group > .card:not(:last-child) > .card-img-bottom, + .card-group > .card:not(:last-child) > .card-footer { + border-bottom-right-radius: 0; } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .card-group > .card:not(:first-child) > .card-img-top, + .card-group > .card:not(:first-child) > .card-header { + border-top-left-radius: 0; } + .card-group > .card:not(:first-child) > .card-img-bottom, + .card-group > .card:not(:first-child) > .card-footer { + border-bottom-left-radius: 0; } } + +.accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: var(--bs-body-bg); + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: var(--bs-border-width); + --bs-accordion-border-radius: var(--bs-border-radius); + --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: var(--bs-primary-text-emphasis); + --bs-accordion-active-bg: var(--bs-primary-bg-subtle); } + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); } + @media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; } } + .accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); } + .accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); } + .accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); } + @media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; } } + .accordion-button:hover { + z-index: 2; } + .accordion-button:focus { + z-index: 3; + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); } + +.accordion-header { + margin-bottom: 0; } + +.accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); } + .accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); } + .accordion-item:first-of-type > .accordion-header .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); } + .accordion-item:not(:first-of-type) { + border-top: 0; } + .accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); } + .accordion-item:last-of-type > .accordion-header .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); } + .accordion-item:last-of-type > .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); } + +.accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); } + +.accordion-flush > .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; } + .accordion-flush > .accordion-item:first-child { + border-top: 0; } + .accordion-flush > .accordion-item:last-child { + border-bottom: 0; } + .accordion-flush > .accordion-item > .accordion-collapse, + .accordion-flush > .accordion-item > .accordion-header .accordion-button, + .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { + border-radius: 0; } + +[data-bs-theme="dark"] .accordion-button::after { + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); } + +.breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-bg: ; + --bs-breadcrumb-border-radius: ; + --bs-breadcrumb-divider-color: var(--bs-secondary-color); + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); } + +.breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); } + .breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; } + +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); } + +.pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: var(--bs-body-bg); + --bs-pagination-border-width: var(--bs-border-width); + --bs-pagination-border-color: var(--bs-border-color); + --bs-pagination-border-radius: var(--bs-border-radius); + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: var(--bs-tertiary-bg); + --bs-pagination-hover-border-color: var(--bs-border-color); + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: var(--bs-secondary-bg); + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: var(--bs-secondary-color); + --bs-pagination-disabled-bg: var(--bs-secondary-bg); + --bs-pagination-disabled-border-color: var(--bs-border-color); + display: flex; + padding-left: 0; + list-style: none; } + +.page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; } } + .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); } + .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); } + .page-link.active, .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); } + .page-link.disabled, .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); } + +.page-item:not(:first-child) .page-link { + margin-left: calc(-1 * var(--bs-border-width)); } + +.page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); } + +.page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); } + +.pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: var(--bs-border-radius-lg); } + +.pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: var(--bs-border-radius-sm); } + +.badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: var(--bs-border-radius); + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); } + .badge:empty { + display: none; } + +.btn .badge { + position: relative; + top: -1px; } + +.alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color); + --bs-alert-border-radius: var(--bs-border-radius); + --bs-alert-link-color: inherit; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); } + +.alert-heading { + color: inherit; } + +.alert-link { + font-weight: 700; + color: var(--bs-alert-link-color); } + +.alert-dismissible { + padding-right: 3rem; } + .alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; } + +.alert-primary { + --bs-alert-color: var(--bs-primary-text-emphasis); + --bs-alert-bg: var(--bs-primary-bg-subtle); + --bs-alert-border-color: var(--bs-primary-border-subtle); + --bs-alert-link-color: var(--bs-primary-text-emphasis); } + +.alert-secondary { + --bs-alert-color: var(--bs-secondary-text-emphasis); + --bs-alert-bg: var(--bs-secondary-bg-subtle); + --bs-alert-border-color: var(--bs-secondary-border-subtle); + --bs-alert-link-color: var(--bs-secondary-text-emphasis); } + +.alert-success { + --bs-alert-color: var(--bs-success-text-emphasis); + --bs-alert-bg: var(--bs-success-bg-subtle); + --bs-alert-border-color: var(--bs-success-border-subtle); + --bs-alert-link-color: var(--bs-success-text-emphasis); } + +.alert-info { + --bs-alert-color: var(--bs-info-text-emphasis); + --bs-alert-bg: var(--bs-info-bg-subtle); + --bs-alert-border-color: var(--bs-info-border-subtle); + --bs-alert-link-color: var(--bs-info-text-emphasis); } + +.alert-warning { + --bs-alert-color: var(--bs-warning-text-emphasis); + --bs-alert-bg: var(--bs-warning-bg-subtle); + --bs-alert-border-color: var(--bs-warning-border-subtle); + --bs-alert-link-color: var(--bs-warning-text-emphasis); } + +.alert-danger { + --bs-alert-color: var(--bs-danger-text-emphasis); + --bs-alert-bg: var(--bs-danger-bg-subtle); + --bs-alert-border-color: var(--bs-danger-border-subtle); + --bs-alert-link-color: var(--bs-danger-text-emphasis); } + +.alert-light { + --bs-alert-color: var(--bs-light-text-emphasis); + --bs-alert-bg: var(--bs-light-bg-subtle); + --bs-alert-border-color: var(--bs-light-border-subtle); + --bs-alert-link-color: var(--bs-light-text-emphasis); } + +.alert-dark { + --bs-alert-color: var(--bs-dark-text-emphasis); + --bs-alert-bg: var(--bs-dark-bg-subtle); + --bs-alert-border-color: var(--bs-dark-border-subtle); + --bs-alert-link-color: var(--bs-dark-text-emphasis); } + +@keyframes progress-bar-stripes { + 0% { + background-position-x: var(--bs-progress-height); } } + +.progress, +.progress-stacked { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: var(--bs-secondary-bg); + --bs-progress-border-radius: var(--bs-border-radius); + --bs-progress-box-shadow: var(--bs-box-shadow-inset); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); } + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); } + @media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; } } +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); } + +.progress-stacked > .progress { + overflow: visible; } + +.progress-stacked > .progress > .progress-bar { + width: 100%; } + +.progress-bar-animated { + animation: 1s linear infinite progress-bar-stripes; } + @media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; } } +.list-group { + --bs-list-group-color: var(--bs-body-color); + --bs-list-group-bg: var(--bs-body-bg); + --bs-list-group-border-color: var(--bs-border-color); + --bs-list-group-border-width: var(--bs-border-width); + --bs-list-group-border-radius: var(--bs-border-radius); + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: var(--bs-secondary-color); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-tertiary-bg); + --bs-list-group-action-active-color: var(--bs-body-color); + --bs-list-group-action-active-bg: var(--bs-secondary-bg); + --bs-list-group-disabled-color: var(--bs-secondary-color); + --bs-list-group-disabled-bg: var(--bs-body-bg); + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); } + +.list-group-numbered { + list-style-type: none; + counter-reset: section; } + .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; } + +.list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); } + .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; } + .list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; } + .list-group-item.disabled, .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); } + .list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); } + .list-group-item + .list-group-item { + border-top-width: 0; } + .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); } + +.list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; } + .list-group-item-action:not(.active):hover, .list-group-item-action:not(.active):focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); } + .list-group-item-action:not(.active):active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); } + +.list-group-horizontal { + flex-direction: row; } + .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; } + .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; } + .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; } + .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; } + .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; } + .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +.list-group-flush { + border-radius: 0; } + .list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); } + .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; } + +.list-group-item-primary { + --bs-list-group-color: var(--bs-primary-text-emphasis); + --bs-list-group-bg: var(--bs-primary-bg-subtle); + --bs-list-group-border-color: var(--bs-primary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-primary-border-subtle); + --bs-list-group-active-color: var(--bs-primary-bg-subtle); + --bs-list-group-active-bg: var(--bs-primary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-primary-text-emphasis); } + +.list-group-item-secondary { + --bs-list-group-color: var(--bs-secondary-text-emphasis); + --bs-list-group-bg: var(--bs-secondary-bg-subtle); + --bs-list-group-border-color: var(--bs-secondary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle); + --bs-list-group-active-color: var(--bs-secondary-bg-subtle); + --bs-list-group-active-bg: var(--bs-secondary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis); } + +.list-group-item-success { + --bs-list-group-color: var(--bs-success-text-emphasis); + --bs-list-group-bg: var(--bs-success-bg-subtle); + --bs-list-group-border-color: var(--bs-success-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-success-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-success-border-subtle); + --bs-list-group-active-color: var(--bs-success-bg-subtle); + --bs-list-group-active-bg: var(--bs-success-text-emphasis); + --bs-list-group-active-border-color: var(--bs-success-text-emphasis); } + +.list-group-item-info { + --bs-list-group-color: var(--bs-info-text-emphasis); + --bs-list-group-bg: var(--bs-info-bg-subtle); + --bs-list-group-border-color: var(--bs-info-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-info-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-info-border-subtle); + --bs-list-group-active-color: var(--bs-info-bg-subtle); + --bs-list-group-active-bg: var(--bs-info-text-emphasis); + --bs-list-group-active-border-color: var(--bs-info-text-emphasis); } + +.list-group-item-warning { + --bs-list-group-color: var(--bs-warning-text-emphasis); + --bs-list-group-bg: var(--bs-warning-bg-subtle); + --bs-list-group-border-color: var(--bs-warning-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-warning-border-subtle); + --bs-list-group-active-color: var(--bs-warning-bg-subtle); + --bs-list-group-active-bg: var(--bs-warning-text-emphasis); + --bs-list-group-active-border-color: var(--bs-warning-text-emphasis); } + +.list-group-item-danger { + --bs-list-group-color: var(--bs-danger-text-emphasis); + --bs-list-group-bg: var(--bs-danger-bg-subtle); + --bs-list-group-border-color: var(--bs-danger-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-danger-border-subtle); + --bs-list-group-active-color: var(--bs-danger-bg-subtle); + --bs-list-group-active-bg: var(--bs-danger-text-emphasis); + --bs-list-group-active-border-color: var(--bs-danger-text-emphasis); } + +.list-group-item-light { + --bs-list-group-color: var(--bs-light-text-emphasis); + --bs-list-group-bg: var(--bs-light-bg-subtle); + --bs-list-group-border-color: var(--bs-light-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-light-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-light-border-subtle); + --bs-list-group-active-color: var(--bs-light-bg-subtle); + --bs-list-group-active-bg: var(--bs-light-text-emphasis); + --bs-list-group-active-border-color: var(--bs-light-text-emphasis); } + +.list-group-item-dark { + --bs-list-group-color: var(--bs-dark-text-emphasis); + --bs-list-group-bg: var(--bs-dark-bg-subtle); + --bs-list-group-border-color: var(--bs-dark-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-dark-border-subtle); + --bs-list-group-active-color: var(--bs-dark-bg-subtle); + --bs-list-group-active-bg: var(--bs-dark-text-emphasis); + --bs-list-group-active-border-color: var(--bs-dark-text-emphasis); } + +.btn-close { + --bs-btn-close-color: #000; + --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e"); + --bs-btn-close-opacity: 0.5; + --bs-btn-close-hover-opacity: 0.75; + --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-btn-close-focus-opacity: 1; + --bs-btn-close-disabled-opacity: 0.25; + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: var(--bs-btn-close-color); + background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; + filter: var(--bs-btn-close-filter); + border: 0; + border-radius: 0.375rem; + opacity: var(--bs-btn-close-opacity); } + .btn-close:hover { + color: var(--bs-btn-close-color); + text-decoration: none; + opacity: var(--bs-btn-close-hover-opacity); } + .btn-close:focus { + outline: 0; + box-shadow: var(--bs-btn-close-focus-shadow); + opacity: var(--bs-btn-close-focus-opacity); } + .btn-close:disabled, .btn-close.disabled { + pointer-events: none; + user-select: none; + opacity: var(--bs-btn-close-disabled-opacity); } + +.btn-close-white { + --bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%); } + +:root, +[data-bs-theme="light"] { + --bs-btn-close-filter: ; } + +[data-bs-theme="dark"] { + --bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%); } + +.toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-color: ; + --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-border-width: var(--bs-border-width); + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: var(--bs-border-radius); + --bs-toast-box-shadow: var(--bs-box-shadow); + --bs-toast-header-color: var(--bs-secondary-color); + --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-header-border-color: var(--bs-border-color-translucent); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); } + .toast.showing { + opacity: 0; } + .toast:not(.show) { + display: none; } + +.toast-container { + --bs-toast-zindex: 1090; + position: absolute; + z-index: var(--bs-toast-zindex); + width: max-content; + max-width: 100%; + pointer-events: none; } + .toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); } + +.toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); } + .toast-header .btn-close { + margin-right: calc(-.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); } + +.toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; } + +.modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-color: var(--bs-body-color); + --bs-modal-bg: var(--bs-body-bg); + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: var(--bs-border-width); + --bs-modal-border-radius: var(--bs-border-radius-lg); + --bs-modal-box-shadow: var(--bs-box-shadow-sm); + --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width))); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: var(--bs-border-width); + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-bg: ; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: var(--bs-border-width); + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; } + +.modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; } + .modal.fade .modal-dialog { + transform: translate(0, -50px); + transition: transform 0.3s ease-out; } + @media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; } } + .modal.show .modal-dialog { + transform: none; } + .modal.modal-static .modal-dialog { + transform: scale(1.02); } + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); } + .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; } + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); } + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; } + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); } + .modal-backdrop.fade { + opacity: 0; } + .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); } + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); } + .modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5); + margin-top: calc(-.5 * var(--bs-modal-header-padding-y)); + margin-right: calc(-.5 * var(--bs-modal-header-padding-x)); + margin-bottom: calc(-.5 * var(--bs-modal-header-padding-y)); + margin-left: auto; } + +.modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); } + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); } + +.modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); } + .modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * .5); } + +@media (min-width: 576px) { + .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: var(--bs-box-shadow); } + .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; } + .modal-sm { + --bs-modal-width: 300px; } } + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + --bs-modal-width: 800px; } } + +@media (min-width: 1200px) { + .modal-xl { + --bs-modal-width: 1140px; } } + +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen .modal-header, + .modal-fullscreen .modal-footer { + border-radius: 0; } + .modal-fullscreen .modal-body { + overflow-y: auto; } + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-sm-down .modal-header, + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-md-down .modal-header, + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-lg-down .modal-header, + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xl-down .modal-header, + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-header, + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; } } + +.tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-margin: ; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: var(--bs-body-bg); + --bs-tooltip-bg: var(--bs-emphasis-color); + --bs-tooltip-border-radius: var(--bs-border-radius); + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; } + .tooltip.show { + opacity: var(--bs-tooltip-opacity); } + .tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); } + .tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; } + +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow { + bottom: calc(-1 * var(--bs-tooltip-arrow-height)); } + .bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; + border-top-color: var(--bs-tooltip-bg); } + +/* rtl:begin:ignore */ +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow { + left: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); } + .bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; + border-right-color: var(--bs-tooltip-bg); } + +/* rtl:end:ignore */ +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow { + top: calc(-1 * var(--bs-tooltip-arrow-height)); } + .bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); } + +/* rtl:begin:ignore */ +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow { + right: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); } + .bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); } + +/* rtl:end:ignore */ +.tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); } + +.popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: var(--bs-body-bg); + --bs-popover-border-width: var(--bs-border-width); + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: var(--bs-border-radius-lg); + --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width)); + --bs-popover-box-shadow: var(--bs-box-shadow); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-color: inherit; + --bs-popover-header-bg: var(--bs-secondary-bg); + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: var(--bs-body-color); + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); } + .popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); } + .popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; } + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); } + .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0; } + .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); } + .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); } + +/* rtl:begin:ignore */ +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); } + .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0; } + .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); } + .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); } + +/* rtl:end:ignore */ +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); } + .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height); } + .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); } + .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); } + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); } + +/* rtl:begin:ignore */ +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); } + .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height); } + .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); } + .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); } + +/* rtl:end:ignore */ +.popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); } + .popover-header:empty { + display: none; } + +.popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); } + +.carousel { + position: relative; } + +.carousel.pointer-event { + touch-action: pan-y; } + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; } + .carousel-inner::after { + display: block; + clear: both; + content: ""; } + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; } } +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; } + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); } + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); } + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; } + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; } + +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; } + @media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, + .carousel-fade .active.carousel-item-end { + transition: none; } } +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + filter: var(--bs-carousel-control-icon-filter); + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; } } + .carousel-control-prev:hover, .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; } + +.carousel-control-prev { + left: 0; } + +.carousel-control-next { + right: 0; } + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; } + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e")*/; } + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e")*/; } + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; } + .carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: var(--bs-carousel-indicator-active-bg); + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; } } + .carousel-indicators .active { + opacity: 1; } + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: var(--bs-carousel-caption-color); + text-align: center; } + +.carousel-dark { + --bs-carousel-indicator-active-bg: #000; + --bs-carousel-caption-color: #000; + --bs-carousel-control-icon-filter: invert(1) grayscale(100); } + +:root, +[data-bs-theme="light"] { + --bs-carousel-indicator-active-bg: #fff; + --bs-carousel-caption-color: #fff; + --bs-carousel-control-icon-filter: ; } + +[data-bs-theme="dark"] { + --bs-carousel-indicator-active-bg: #000; + --bs-carousel-caption-color: #000; + --bs-carousel-control-icon-filter: invert(1) grayscale(100); } + +.spinner-grow, +.spinner-border { + display: inline-block; + flex-shrink: 0; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); } + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; } } + +.spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; } + +.spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; } + +@keyframes spinner-grow { + 0% { + transform: scale(0); } + 50% { + opacity: 1; + transform: none; } } + +.spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; } + +.spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; } + +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + --bs-spinner-animation-speed: 1.5s; } } + +.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-color: var(--bs-body-color); + --bs-offcanvas-bg: var(--bs-body-bg); + --bs-offcanvas-border-width: var(--bs-border-width); + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm); + --bs-offcanvas-transition: transform 0.3s ease-in-out; + --bs-offcanvas-title-line-height: 1.5; } + +@media (max-width: 575.98px) { + .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-sm { + transition: none; } } +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) { + transform: none; } + .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { + visibility: visible; } } + +@media (min-width: 576px) { + .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-sm .offcanvas-header { + display: none; } + .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 767.98px) { + .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-md { + transition: none; } } +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) { + transform: none; } + .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { + visibility: visible; } } + +@media (min-width: 768px) { + .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-md .offcanvas-header { + display: none; } + .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 991.98px) { + .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-lg { + transition: none; } } +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) { + transform: none; } + .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { + visibility: visible; } } + +@media (min-width: 992px) { + .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-lg .offcanvas-header { + display: none; } + .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 1199.98px) { + .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xl { + transition: none; } } +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) { + transform: none; } + .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { + visibility: visible; } } + +@media (min-width: 1200px) { + .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-xl .offcanvas-header { + display: none; } + .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 1399.98px) { + .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xxl { + transition: none; } } +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) { + transform: none; } + .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { + visibility: visible; } } + +@media (min-width: 1400px) { + .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-xxl .offcanvas-header { + display: none; } + .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +.offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); } + @media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; } } + .offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas.showing, .offcanvas.show:not(.hiding) { + transform: none; } + .offcanvas.showing, .offcanvas.hiding, .offcanvas.show { + visibility: visible; } + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; } + .offcanvas-backdrop.fade { + opacity: 0; } + .offcanvas-backdrop.show { + opacity: 0.5; } + +.offcanvas-header { + display: flex; + align-items: center; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); } + .offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5); + margin-top: calc(-.5 * var(--bs-offcanvas-padding-y)); + margin-right: calc(-.5 * var(--bs-offcanvas-padding-x)); + margin-bottom: calc(-.5 * var(--bs-offcanvas-padding-y)); + margin-left: auto; } + +.offcanvas-title { + margin-bottom: 0; + line-height: var(--bs-offcanvas-title-line-height); } + +.offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; } + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; } + .placeholder.btn::before { + display: inline-block; + content: ""; } + +.placeholder-xs { + min-height: .6em; } + +.placeholder-sm { + min-height: .8em; } + +.placeholder-lg { + min-height: 1.2em; } + +.placeholder-glow .placeholder { + animation: placeholder-glow 2s ease-in-out infinite; } + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; } } + +.placeholder-wave { + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; } + +@keyframes placeholder-wave { + 100% { + mask-position: -200% 0%; } } + +.clearfix::after { + display: block; + clear: both; + content: ""; } + +.text-bg-primary { + color: #fff !important; + background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-secondary { + color: #fff !important; + background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-success { + color: #fff !important; + background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-info { + color: #000 !important; + background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-warning { + color: #000 !important; + background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-danger { + color: #fff !important; + background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-light { + color: #000 !important; + background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-dark { + color: #fff !important; + background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important; } + +.link-primary { + color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-primary:hover, .link-primary:focus { + color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important; } + +.link-secondary { + color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-secondary:hover, .link-secondary:focus { + color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important; } + +.link-success { + color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-success:hover, .link-success:focus { + color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important; } + +.link-info { + color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-info:hover, .link-info:focus { + color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important; } + +.link-warning { + color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-warning:hover, .link-warning:focus { + color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important; } + +.link-danger { + color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-danger:hover, .link-danger:focus { + color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important; } + +.link-light { + color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-light:hover, .link-light:focus { + color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important; } + +.link-dark { + color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-dark:hover, .link-dark:focus { + color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important; } + +.link-body-emphasis { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-body-emphasis:hover, .link-body-emphasis:focus { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; } + +.focus-ring:focus { + outline: 0; + box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color); } + +.icon-link { + display: inline-flex; + gap: 0.375rem; + align-items: center; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-underline-offset: 0.25em; + backface-visibility: hidden; } + .icon-link > .bi { + flex-shrink: 0; + width: 1em; + height: 1em; + fill: currentcolor; + transition: 0.2s ease-in-out transform; } + @media (prefers-reduced-motion: reduce) { + .icon-link > .bi { + transition: none; } } +.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi { + transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0)); } + +.ratio { + position: relative; + width: 100%; } + .ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; } + .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + +.ratio-1x1 { + --bs-aspect-ratio: 100%; } + +.ratio-4x3 { + --bs-aspect-ratio: calc(3 / 4 * 100%); } + +.ratio-16x9 { + --bs-aspect-ratio: calc(9 / 16 * 100%); } + +.ratio-21x9 { + --bs-aspect-ratio: calc(9 / 21 * 100%); } + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; } + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; } + +.sticky-top { + position: sticky; + top: 0; + z-index: 1020; } + +.sticky-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } + +@media (min-width: 576px) { + .sticky-sm-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-sm-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 768px) { + .sticky-md-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-md-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 992px) { + .sticky-lg-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-lg-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1200px) { + .sticky-xl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1400px) { + .sticky-xxl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xxl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; } + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; } + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; } + .visually-hidden:not(caption), + .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { + position: absolute !important; } + .visually-hidden *, + .visually-hidden-focusable:not(:focus):not(:focus-within) * { + overflow: hidden !important; } + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; } + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + +.vr { + display: inline-block; + align-self: stretch; + width: var(--bs-border-width); + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; } + +.align-baseline { + vertical-align: baseline !important; } + +.align-top { + vertical-align: top !important; } + +.align-middle { + vertical-align: middle !important; } + +.align-bottom { + vertical-align: bottom !important; } + +.align-text-bottom { + vertical-align: text-bottom !important; } + +.align-text-top { + vertical-align: text-top !important; } + +.float-start { + float: left !important; } + +.float-end { + float: right !important; } + +.float-none { + float: none !important; } + +.object-fit-contain { + object-fit: contain !important; } + +.object-fit-cover { + object-fit: cover !important; } + +.object-fit-fill { + object-fit: fill !important; } + +.object-fit-scale { + object-fit: scale-down !important; } + +.object-fit-none { + object-fit: none !important; } + +.opacity-0 { + opacity: 0 !important; } + +.opacity-25 { + opacity: 0.25 !important; } + +.opacity-50 { + opacity: 0.5 !important; } + +.opacity-75 { + opacity: 0.75 !important; } + +.opacity-100 { + opacity: 1 !important; } + +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + +.overflow-visible { + overflow: visible !important; } + +.overflow-scroll { + overflow: scroll !important; } + +.overflow-x-auto { + overflow-x: auto !important; } + +.overflow-x-hidden { + overflow-x: hidden !important; } + +.overflow-x-visible { + overflow-x: visible !important; } + +.overflow-x-scroll { + overflow-x: scroll !important; } + +.overflow-y-auto { + overflow-y: auto !important; } + +.overflow-y-hidden { + overflow-y: hidden !important; } + +.overflow-y-visible { + overflow-y: visible !important; } + +.overflow-y-scroll { + overflow-y: scroll !important; } + +.d-inline { + display: inline !important; } + +.d-inline-block { + display: inline-block !important; } + +.d-block { + display: block !important; } + +.d-grid { + display: grid !important; } + +.d-inline-grid { + display: inline-grid !important; } + +.d-table { + display: table !important; } + +.d-table-row { + display: table-row !important; } + +.d-table-cell { + display: table-cell !important; } + +.d-flex { + display: flex !important; } + +.d-inline-flex { + display: inline-flex !important; } + +.d-none { + display: none !important; } + +.shadow { + box-shadow: var(--bs-box-shadow) !important; } + +.shadow-sm { + box-shadow: var(--bs-box-shadow-sm) !important; } + +.shadow-lg { + box-shadow: var(--bs-box-shadow-lg) !important; } + +.shadow-none { + box-shadow: none !important; } + +.focus-ring-primary { + --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-secondary { + --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-success { + --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-info { + --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-warning { + --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-danger { + --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-light { + --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-dark { + --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity)); } + +.position-static { + position: static !important; } + +.position-relative { + position: relative !important; } + +.position-absolute { + position: absolute !important; } + +.position-fixed { + position: fixed !important; } + +.position-sticky { + position: sticky !important; } + +.top-0 { + top: 0 !important; } + +.top-50 { + top: 50% !important; } + +.top-100 { + top: 100% !important; } + +.bottom-0 { + bottom: 0 !important; } + +.bottom-50 { + bottom: 50% !important; } + +.bottom-100 { + bottom: 100% !important; } + +.start-0 { + left: 0 !important; } + +.start-50 { + left: 50% !important; } + +.start-100 { + left: 100% !important; } + +.end-0 { + right: 0 !important; } + +.end-50 { + right: 50% !important; } + +.end-100 { + right: 100% !important; } + +.translate-middle { + transform: translate(-50%, -50%) !important; } + +.translate-middle-x { + transform: translateX(-50%) !important; } + +.translate-middle-y { + transform: translateY(-50%) !important; } + +.border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-0 { + border: 0 !important; } + +.border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-top-0 { + border-top: 0 !important; } + +.border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-end-0 { + border-right: 0 !important; } + +.border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-bottom-0 { + border-bottom: 0 !important; } + +.border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-start-0 { + border-left: 0 !important; } + +.border-primary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; } + +.border-secondary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; } + +.border-success { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; } + +.border-info { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; } + +.border-warning { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; } + +.border-danger { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; } + +.border-light { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; } + +.border-dark { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; } + +.border-black { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important; } + +.border-white { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; } + +.border-primary-subtle { + border-color: var(--bs-primary-border-subtle) !important; } + +.border-secondary-subtle { + border-color: var(--bs-secondary-border-subtle) !important; } + +.border-success-subtle { + border-color: var(--bs-success-border-subtle) !important; } + +.border-info-subtle { + border-color: var(--bs-info-border-subtle) !important; } + +.border-warning-subtle { + border-color: var(--bs-warning-border-subtle) !important; } + +.border-danger-subtle { + border-color: var(--bs-danger-border-subtle) !important; } + +.border-light-subtle { + border-color: var(--bs-light-border-subtle) !important; } + +.border-dark-subtle { + border-color: var(--bs-dark-border-subtle) !important; } + +.border-1 { + border-width: 1px !important; } + +.border-2 { + border-width: 2px !important; } + +.border-3 { + border-width: 3px !important; } + +.border-4 { + border-width: 4px !important; } + +.border-5 { + border-width: 5px !important; } + +.border-opacity-10 { + --bs-border-opacity: 0.1; } + +.border-opacity-25 { + --bs-border-opacity: 0.25; } + +.border-opacity-50 { + --bs-border-opacity: 0.5; } + +.border-opacity-75 { + --bs-border-opacity: 0.75; } + +.border-opacity-100 { + --bs-border-opacity: 1; } + +.w-25 { + width: 25% !important; } + +.w-50 { + width: 50% !important; } + +.w-75 { + width: 75% !important; } + +.w-100 { + width: 100% !important; } + +.w-auto { + width: auto !important; } + +.mw-100 { + max-width: 100% !important; } + +.vw-100 { + width: 100vw !important; } + +.min-vw-100 { + min-width: 100vw !important; } + +.h-25 { + height: 25% !important; } + +.h-50 { + height: 50% !important; } + +.h-75 { + height: 75% !important; } + +.h-100 { + height: 100% !important; } + +.h-auto { + height: auto !important; } + +.mh-100 { + max-height: 100% !important; } + +.vh-100 { + height: 100vh !important; } + +.min-vh-100 { + min-height: 100vh !important; } + +.flex-fill { + flex: 1 1 auto !important; } + +.flex-row { + flex-direction: row !important; } + +.flex-column { + flex-direction: column !important; } + +.flex-row-reverse { + flex-direction: row-reverse !important; } + +.flex-column-reverse { + flex-direction: column-reverse !important; } + +.flex-grow-0 { + flex-grow: 0 !important; } + +.flex-grow-1 { + flex-grow: 1 !important; } + +.flex-shrink-0 { + flex-shrink: 0 !important; } + +.flex-shrink-1 { + flex-shrink: 1 !important; } + +.flex-wrap { + flex-wrap: wrap !important; } + +.flex-nowrap { + flex-wrap: nowrap !important; } + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; } + +.justify-content-start { + justify-content: flex-start !important; } + +.justify-content-end { + justify-content: flex-end !important; } + +.justify-content-center { + justify-content: center !important; } + +.justify-content-between { + justify-content: space-between !important; } + +.justify-content-around { + justify-content: space-around !important; } + +.justify-content-evenly { + justify-content: space-evenly !important; } + +.align-items-start { + align-items: flex-start !important; } + +.align-items-end { + align-items: flex-end !important; } + +.align-items-center { + align-items: center !important; } + +.align-items-baseline { + align-items: baseline !important; } + +.align-items-stretch { + align-items: stretch !important; } + +.align-content-start { + align-content: flex-start !important; } + +.align-content-end { + align-content: flex-end !important; } + +.align-content-center { + align-content: center !important; } + +.align-content-between { + align-content: space-between !important; } + +.align-content-around { + align-content: space-around !important; } + +.align-content-stretch { + align-content: stretch !important; } + +.align-self-auto { + align-self: auto !important; } + +.align-self-start { + align-self: flex-start !important; } + +.align-self-end { + align-self: flex-end !important; } + +.align-self-center { + align-self: center !important; } + +.align-self-baseline { + align-self: baseline !important; } + +.align-self-stretch { + align-self: stretch !important; } + +.order-first { + order: -1 !important; } + +.order-0 { + order: 0 !important; } + +.order-1 { + order: 1 !important; } + +.order-2 { + order: 2 !important; } + +.order-3 { + order: 3 !important; } + +.order-4 { + order: 4 !important; } + +.order-5 { + order: 5 !important; } + +.order-last { + order: 6 !important; } + +.m-0 { + margin: 0 !important; } + +.m-1 { + margin: 0.25rem !important; } + +.m-2 { + margin: 0.5rem !important; } + +.m-3 { + margin: 1rem !important; } + +.m-4 { + margin: 1.5rem !important; } + +.m-5 { + margin: 3rem !important; } + +.m-auto { + margin: auto !important; } + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; } + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + +.mt-0 { + margin-top: 0 !important; } + +.mt-1 { + margin-top: 0.25rem !important; } + +.mt-2 { + margin-top: 0.5rem !important; } + +.mt-3 { + margin-top: 1rem !important; } + +.mt-4 { + margin-top: 1.5rem !important; } + +.mt-5 { + margin-top: 3rem !important; } + +.mt-auto { + margin-top: auto !important; } + +.me-0 { + margin-right: 0 !important; } + +.me-1 { + margin-right: 0.25rem !important; } + +.me-2 { + margin-right: 0.5rem !important; } + +.me-3 { + margin-right: 1rem !important; } + +.me-4 { + margin-right: 1.5rem !important; } + +.me-5 { + margin-right: 3rem !important; } + +.me-auto { + margin-right: auto !important; } + +.mb-0 { + margin-bottom: 0 !important; } + +.mb-1 { + margin-bottom: 0.25rem !important; } + +.mb-2 { + margin-bottom: 0.5rem !important; } + +.mb-3 { + margin-bottom: 1rem !important; } + +.mb-4 { + margin-bottom: 1.5rem !important; } + +.mb-5 { + margin-bottom: 3rem !important; } + +.mb-auto { + margin-bottom: auto !important; } + +.ms-0 { + margin-left: 0 !important; } + +.ms-1 { + margin-left: 0.25rem !important; } + +.ms-2 { + margin-left: 0.5rem !important; } + +.ms-3 { + margin-left: 1rem !important; } + +.ms-4 { + margin-left: 1.5rem !important; } + +.ms-5 { + margin-left: 3rem !important; } + +.ms-auto { + margin-left: auto !important; } + +.p-0 { + padding: 0 !important; } + +.p-1 { + padding: 0.25rem !important; } + +.p-2 { + padding: 0.5rem !important; } + +.p-3 { + padding: 1rem !important; } + +.p-4 { + padding: 1.5rem !important; } + +.p-5 { + padding: 3rem !important; } + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + +.pt-0 { + padding-top: 0 !important; } + +.pt-1 { + padding-top: 0.25rem !important; } + +.pt-2 { + padding-top: 0.5rem !important; } + +.pt-3 { + padding-top: 1rem !important; } + +.pt-4 { + padding-top: 1.5rem !important; } + +.pt-5 { + padding-top: 3rem !important; } + +.pe-0 { + padding-right: 0 !important; } + +.pe-1 { + padding-right: 0.25rem !important; } + +.pe-2 { + padding-right: 0.5rem !important; } + +.pe-3 { + padding-right: 1rem !important; } + +.pe-4 { + padding-right: 1.5rem !important; } + +.pe-5 { + padding-right: 3rem !important; } + +.pb-0 { + padding-bottom: 0 !important; } + +.pb-1 { + padding-bottom: 0.25rem !important; } + +.pb-2 { + padding-bottom: 0.5rem !important; } + +.pb-3 { + padding-bottom: 1rem !important; } + +.pb-4 { + padding-bottom: 1.5rem !important; } + +.pb-5 { + padding-bottom: 3rem !important; } + +.ps-0 { + padding-left: 0 !important; } + +.ps-1 { + padding-left: 0.25rem !important; } + +.ps-2 { + padding-left: 0.5rem !important; } + +.ps-3 { + padding-left: 1rem !important; } + +.ps-4 { + padding-left: 1.5rem !important; } + +.ps-5 { + padding-left: 3rem !important; } + +.gap-0 { + gap: 0 !important; } + +.gap-1 { + gap: 0.25rem !important; } + +.gap-2 { + gap: 0.5rem !important; } + +.gap-3 { + gap: 1rem !important; } + +.gap-4 { + gap: 1.5rem !important; } + +.gap-5 { + gap: 3rem !important; } + +.row-gap-0 { + row-gap: 0 !important; } + +.row-gap-1 { + row-gap: 0.25rem !important; } + +.row-gap-2 { + row-gap: 0.5rem !important; } + +.row-gap-3 { + row-gap: 1rem !important; } + +.row-gap-4 { + row-gap: 1.5rem !important; } + +.row-gap-5 { + row-gap: 3rem !important; } + +.column-gap-0 { + column-gap: 0 !important; } + +.column-gap-1 { + column-gap: 0.25rem !important; } + +.column-gap-2 { + column-gap: 0.5rem !important; } + +.column-gap-3 { + column-gap: 1rem !important; } + +.column-gap-4 { + column-gap: 1.5rem !important; } + +.column-gap-5 { + column-gap: 3rem !important; } + +.font-monospace { + font-family: var(--bs-font-monospace) !important; } + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; } + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; } + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; } + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; } + +.fs-5 { + font-size: 1.25rem !important; } + +.fs-6 { + font-size: 1rem !important; } + +.fst-italic { + font-style: italic !important; } + +.fst-normal { + font-style: normal !important; } + +.fw-lighter { + font-weight: lighter !important; } + +.fw-light { + font-weight: 300 !important; } + +.fw-normal { + font-weight: 400 !important; } + +.fw-medium { + font-weight: 500 !important; } + +.fw-semibold { + font-weight: 600 !important; } + +.fw-bold { + font-weight: 700 !important; } + +.fw-bolder { + font-weight: bolder !important; } + +.lh-1 { + line-height: 1 !important; } + +.lh-sm { + line-height: 1.25 !important; } + +.lh-base { + line-height: 1.5 !important; } + +.lh-lg { + line-height: 2 !important; } + +.text-start { + text-align: left !important; } + +.text-end { + text-align: right !important; } + +.text-center { + text-align: center !important; } + +.text-decoration-none { + text-decoration: none !important; } + +.text-decoration-underline { + text-decoration: underline !important; } + +.text-decoration-line-through { + text-decoration: line-through !important; } + +.text-lowercase { + text-transform: lowercase !important; } + +.text-uppercase { + text-transform: uppercase !important; } + +.text-capitalize { + text-transform: capitalize !important; } + +.text-wrap { + white-space: normal !important; } + +.text-nowrap { + white-space: nowrap !important; } + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; } + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; } + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; } + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; } + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; } + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; } + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; } + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; } + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; } + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; } + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; } + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; } + +.text-muted { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; } + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; } + +.text-body-secondary { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-body-tertiary { + --bs-text-opacity: 1; + color: var(--bs-tertiary-color) !important; } + +.text-body-emphasis { + --bs-text-opacity: 1; + color: var(--bs-emphasis-color) !important; } + +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; } + +.text-opacity-25 { + --bs-text-opacity: 0.25; } + +.text-opacity-50 { + --bs-text-opacity: 0.5; } + +.text-opacity-75 { + --bs-text-opacity: 0.75; } + +.text-opacity-100 { + --bs-text-opacity: 1; } + +.text-primary-emphasis { + color: var(--bs-primary-text-emphasis) !important; } + +.text-secondary-emphasis { + color: var(--bs-secondary-text-emphasis) !important; } + +.text-success-emphasis { + color: var(--bs-success-text-emphasis) !important; } + +.text-info-emphasis { + color: var(--bs-info-text-emphasis) !important; } + +.text-warning-emphasis { + color: var(--bs-warning-text-emphasis) !important; } + +.text-danger-emphasis { + color: var(--bs-danger-text-emphasis) !important; } + +.text-light-emphasis { + color: var(--bs-light-text-emphasis) !important; } + +.text-dark-emphasis { + color: var(--bs-dark-text-emphasis) !important; } + +.link-opacity-10 { + --bs-link-opacity: 0.1; } + +.link-opacity-10-hover:hover { + --bs-link-opacity: 0.1; } + +.link-opacity-25 { + --bs-link-opacity: 0.25; } + +.link-opacity-25-hover:hover { + --bs-link-opacity: 0.25; } + +.link-opacity-50 { + --bs-link-opacity: 0.5; } + +.link-opacity-50-hover:hover { + --bs-link-opacity: 0.5; } + +.link-opacity-75 { + --bs-link-opacity: 0.75; } + +.link-opacity-75-hover:hover { + --bs-link-opacity: 0.75; } + +.link-opacity-100 { + --bs-link-opacity: 1; } + +.link-opacity-100-hover:hover { + --bs-link-opacity: 1; } + +.link-offset-1 { + text-underline-offset: 0.125em !important; } + +.link-offset-1-hover:hover { + text-underline-offset: 0.125em !important; } + +.link-offset-2 { + text-underline-offset: 0.25em !important; } + +.link-offset-2-hover:hover { + text-underline-offset: 0.25em !important; } + +.link-offset-3 { + text-underline-offset: 0.375em !important; } + +.link-offset-3-hover:hover { + text-underline-offset: 0.375em !important; } + +.link-underline-primary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-secondary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-success { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-info { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-warning { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-danger { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-light { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-dark { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + +.link-underline-opacity-0 { + --bs-link-underline-opacity: 0; } + +.link-underline-opacity-0-hover:hover { + --bs-link-underline-opacity: 0; } + +.link-underline-opacity-10 { + --bs-link-underline-opacity: 0.1; } + +.link-underline-opacity-10-hover:hover { + --bs-link-underline-opacity: 0.1; } + +.link-underline-opacity-25 { + --bs-link-underline-opacity: 0.25; } + +.link-underline-opacity-25-hover:hover { + --bs-link-underline-opacity: 0.25; } + +.link-underline-opacity-50 { + --bs-link-underline-opacity: 0.5; } + +.link-underline-opacity-50-hover:hover { + --bs-link-underline-opacity: 0.5; } + +.link-underline-opacity-75 { + --bs-link-underline-opacity: 0.75; } + +.link-underline-opacity-75-hover:hover { + --bs-link-underline-opacity: 0.75; } + +.link-underline-opacity-100 { + --bs-link-underline-opacity: 1; } + +.link-underline-opacity-100-hover:hover { + --bs-link-underline-opacity: 1; } + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; } + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; } + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; } + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; } + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; } + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; } + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; } + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; } + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; } + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; } + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; } + +.bg-body-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-body-tertiary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-opacity-10 { + --bs-bg-opacity: 0.1; } + +.bg-opacity-25 { + --bs-bg-opacity: 0.25; } + +.bg-opacity-50 { + --bs-bg-opacity: 0.5; } + +.bg-opacity-75 { + --bs-bg-opacity: 0.75; } + +.bg-opacity-100 { + --bs-bg-opacity: 1; } + +.bg-primary-subtle { + background-color: var(--bs-primary-bg-subtle) !important; } + +.bg-secondary-subtle { + background-color: var(--bs-secondary-bg-subtle) !important; } + +.bg-success-subtle { + background-color: var(--bs-success-bg-subtle) !important; } + +.bg-info-subtle { + background-color: var(--bs-info-bg-subtle) !important; } + +.bg-warning-subtle { + background-color: var(--bs-warning-bg-subtle) !important; } + +.bg-danger-subtle { + background-color: var(--bs-danger-bg-subtle) !important; } + +.bg-light-subtle { + background-color: var(--bs-light-bg-subtle) !important; } + +.bg-dark-subtle { + background-color: var(--bs-dark-bg-subtle) !important; } + +.bg-gradient { + background-image: var(--bs-gradient) !important; } + +.user-select-all { + user-select: all !important; } + +.user-select-auto { + user-select: auto !important; } + +.user-select-none { + user-select: none !important; } + +.pe-none { + pointer-events: none !important; } + +.pe-auto { + pointer-events: auto !important; } + +.rounded { + border-radius: var(--bs-border-radius) !important; } + +.rounded-0 { + border-radius: 0 !important; } + +.rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; } + +.rounded-2 { + border-radius: var(--bs-border-radius) !important; } + +.rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; } + +.rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; } + +.rounded-5 { + border-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-circle { + border-radius: 50% !important; } + +.rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; } + +.rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; } + +.rounded-top-0 { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; } + +.rounded-top-1 { + border-top-left-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; } + +.rounded-top-2 { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; } + +.rounded-top-3 { + border-top-left-radius: var(--bs-border-radius-lg) !important; + border-top-right-radius: var(--bs-border-radius-lg) !important; } + +.rounded-top-4 { + border-top-left-radius: var(--bs-border-radius-xl) !important; + border-top-right-radius: var(--bs-border-radius-xl) !important; } + +.rounded-top-5 { + border-top-left-radius: var(--bs-border-radius-xxl) !important; + border-top-right-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-top-circle { + border-top-left-radius: 50% !important; + border-top-right-radius: 50% !important; } + +.rounded-top-pill { + border-top-left-radius: var(--bs-border-radius-pill) !important; + border-top-right-radius: var(--bs-border-radius-pill) !important; } + +.rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; } + +.rounded-end-0 { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; } + +.rounded-end-1 { + border-top-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; } + +.rounded-end-2 { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; } + +.rounded-end-3 { + border-top-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-right-radius: var(--bs-border-radius-lg) !important; } + +.rounded-end-4 { + border-top-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-right-radius: var(--bs-border-radius-xl) !important; } + +.rounded-end-5 { + border-top-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-end-circle { + border-top-right-radius: 50% !important; + border-bottom-right-radius: 50% !important; } + +.rounded-end-pill { + border-top-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-right-radius: var(--bs-border-radius-pill) !important; } + +.rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; } + +.rounded-bottom-0 { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; } + +.rounded-bottom-1 { + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-left-radius: var(--bs-border-radius-sm) !important; } + +.rounded-bottom-2 { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; } + +.rounded-bottom-3 { + border-bottom-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-left-radius: var(--bs-border-radius-lg) !important; } + +.rounded-bottom-4 { + border-bottom-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-left-radius: var(--bs-border-radius-xl) !important; } + +.rounded-bottom-5 { + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-bottom-circle { + border-bottom-right-radius: 50% !important; + border-bottom-left-radius: 50% !important; } + +.rounded-bottom-pill { + border-bottom-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-left-radius: var(--bs-border-radius-pill) !important; } + +.rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; } + +.rounded-start-0 { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; } + +.rounded-start-1 { + border-bottom-left-radius: var(--bs-border-radius-sm) !important; + border-top-left-radius: var(--bs-border-radius-sm) !important; } + +.rounded-start-2 { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; } + +.rounded-start-3 { + border-bottom-left-radius: var(--bs-border-radius-lg) !important; + border-top-left-radius: var(--bs-border-radius-lg) !important; } + +.rounded-start-4 { + border-bottom-left-radius: var(--bs-border-radius-xl) !important; + border-top-left-radius: var(--bs-border-radius-xl) !important; } + +.rounded-start-5 { + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; + border-top-left-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-start-circle { + border-bottom-left-radius: 50% !important; + border-top-left-radius: 50% !important; } + +.rounded-start-pill { + border-bottom-left-radius: var(--bs-border-radius-pill) !important; + border-top-left-radius: var(--bs-border-radius-pill) !important; } + +.visible { + visibility: visible !important; } + +.invisible { + visibility: hidden !important; } + +.z-n1 { + z-index: -1 !important; } + +.z-0 { + z-index: 0 !important; } + +.z-1 { + z-index: 1 !important; } + +.z-2 { + z-index: 2 !important; } + +.z-3 { + z-index: 3 !important; } + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; } + .float-sm-end { + float: right !important; } + .float-sm-none { + float: none !important; } + .object-fit-sm-contain { + object-fit: contain !important; } + .object-fit-sm-cover { + object-fit: cover !important; } + .object-fit-sm-fill { + object-fit: fill !important; } + .object-fit-sm-scale { + object-fit: scale-down !important; } + .object-fit-sm-none { + object-fit: none !important; } + .d-sm-inline { + display: inline !important; } + .d-sm-inline-block { + display: inline-block !important; } + .d-sm-block { + display: block !important; } + .d-sm-grid { + display: grid !important; } + .d-sm-inline-grid { + display: inline-grid !important; } + .d-sm-table { + display: table !important; } + .d-sm-table-row { + display: table-row !important; } + .d-sm-table-cell { + display: table-cell !important; } + .d-sm-flex { + display: flex !important; } + .d-sm-inline-flex { + display: inline-flex !important; } + .d-sm-none { + display: none !important; } + .flex-sm-fill { + flex: 1 1 auto !important; } + .flex-sm-row { + flex-direction: row !important; } + .flex-sm-column { + flex-direction: column !important; } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; } + .flex-sm-grow-0 { + flex-grow: 0 !important; } + .flex-sm-grow-1 { + flex-grow: 1 !important; } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; } + .flex-sm-wrap { + flex-wrap: wrap !important; } + .flex-sm-nowrap { + flex-wrap: nowrap !important; } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-sm-start { + justify-content: flex-start !important; } + .justify-content-sm-end { + justify-content: flex-end !important; } + .justify-content-sm-center { + justify-content: center !important; } + .justify-content-sm-between { + justify-content: space-between !important; } + .justify-content-sm-around { + justify-content: space-around !important; } + .justify-content-sm-evenly { + justify-content: space-evenly !important; } + .align-items-sm-start { + align-items: flex-start !important; } + .align-items-sm-end { + align-items: flex-end !important; } + .align-items-sm-center { + align-items: center !important; } + .align-items-sm-baseline { + align-items: baseline !important; } + .align-items-sm-stretch { + align-items: stretch !important; } + .align-content-sm-start { + align-content: flex-start !important; } + .align-content-sm-end { + align-content: flex-end !important; } + .align-content-sm-center { + align-content: center !important; } + .align-content-sm-between { + align-content: space-between !important; } + .align-content-sm-around { + align-content: space-around !important; } + .align-content-sm-stretch { + align-content: stretch !important; } + .align-self-sm-auto { + align-self: auto !important; } + .align-self-sm-start { + align-self: flex-start !important; } + .align-self-sm-end { + align-self: flex-end !important; } + .align-self-sm-center { + align-self: center !important; } + .align-self-sm-baseline { + align-self: baseline !important; } + .align-self-sm-stretch { + align-self: stretch !important; } + .order-sm-first { + order: -1 !important; } + .order-sm-0 { + order: 0 !important; } + .order-sm-1 { + order: 1 !important; } + .order-sm-2 { + order: 2 !important; } + .order-sm-3 { + order: 3 !important; } + .order-sm-4 { + order: 4 !important; } + .order-sm-5 { + order: 5 !important; } + .order-sm-last { + order: 6 !important; } + .m-sm-0 { + margin: 0 !important; } + .m-sm-1 { + margin: 0.25rem !important; } + .m-sm-2 { + margin: 0.5rem !important; } + .m-sm-3 { + margin: 1rem !important; } + .m-sm-4 { + margin: 1.5rem !important; } + .m-sm-5 { + margin: 3rem !important; } + .m-sm-auto { + margin: auto !important; } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-sm-0 { + margin-top: 0 !important; } + .mt-sm-1 { + margin-top: 0.25rem !important; } + .mt-sm-2 { + margin-top: 0.5rem !important; } + .mt-sm-3 { + margin-top: 1rem !important; } + .mt-sm-4 { + margin-top: 1.5rem !important; } + .mt-sm-5 { + margin-top: 3rem !important; } + .mt-sm-auto { + margin-top: auto !important; } + .me-sm-0 { + margin-right: 0 !important; } + .me-sm-1 { + margin-right: 0.25rem !important; } + .me-sm-2 { + margin-right: 0.5rem !important; } + .me-sm-3 { + margin-right: 1rem !important; } + .me-sm-4 { + margin-right: 1.5rem !important; } + .me-sm-5 { + margin-right: 3rem !important; } + .me-sm-auto { + margin-right: auto !important; } + .mb-sm-0 { + margin-bottom: 0 !important; } + .mb-sm-1 { + margin-bottom: 0.25rem !important; } + .mb-sm-2 { + margin-bottom: 0.5rem !important; } + .mb-sm-3 { + margin-bottom: 1rem !important; } + .mb-sm-4 { + margin-bottom: 1.5rem !important; } + .mb-sm-5 { + margin-bottom: 3rem !important; } + .mb-sm-auto { + margin-bottom: auto !important; } + .ms-sm-0 { + margin-left: 0 !important; } + .ms-sm-1 { + margin-left: 0.25rem !important; } + .ms-sm-2 { + margin-left: 0.5rem !important; } + .ms-sm-3 { + margin-left: 1rem !important; } + .ms-sm-4 { + margin-left: 1.5rem !important; } + .ms-sm-5 { + margin-left: 3rem !important; } + .ms-sm-auto { + margin-left: auto !important; } + .p-sm-0 { + padding: 0 !important; } + .p-sm-1 { + padding: 0.25rem !important; } + .p-sm-2 { + padding: 0.5rem !important; } + .p-sm-3 { + padding: 1rem !important; } + .p-sm-4 { + padding: 1.5rem !important; } + .p-sm-5 { + padding: 3rem !important; } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-sm-0 { + padding-top: 0 !important; } + .pt-sm-1 { + padding-top: 0.25rem !important; } + .pt-sm-2 { + padding-top: 0.5rem !important; } + .pt-sm-3 { + padding-top: 1rem !important; } + .pt-sm-4 { + padding-top: 1.5rem !important; } + .pt-sm-5 { + padding-top: 3rem !important; } + .pe-sm-0 { + padding-right: 0 !important; } + .pe-sm-1 { + padding-right: 0.25rem !important; } + .pe-sm-2 { + padding-right: 0.5rem !important; } + .pe-sm-3 { + padding-right: 1rem !important; } + .pe-sm-4 { + padding-right: 1.5rem !important; } + .pe-sm-5 { + padding-right: 3rem !important; } + .pb-sm-0 { + padding-bottom: 0 !important; } + .pb-sm-1 { + padding-bottom: 0.25rem !important; } + .pb-sm-2 { + padding-bottom: 0.5rem !important; } + .pb-sm-3 { + padding-bottom: 1rem !important; } + .pb-sm-4 { + padding-bottom: 1.5rem !important; } + .pb-sm-5 { + padding-bottom: 3rem !important; } + .ps-sm-0 { + padding-left: 0 !important; } + .ps-sm-1 { + padding-left: 0.25rem !important; } + .ps-sm-2 { + padding-left: 0.5rem !important; } + .ps-sm-3 { + padding-left: 1rem !important; } + .ps-sm-4 { + padding-left: 1.5rem !important; } + .ps-sm-5 { + padding-left: 3rem !important; } + .gap-sm-0 { + gap: 0 !important; } + .gap-sm-1 { + gap: 0.25rem !important; } + .gap-sm-2 { + gap: 0.5rem !important; } + .gap-sm-3 { + gap: 1rem !important; } + .gap-sm-4 { + gap: 1.5rem !important; } + .gap-sm-5 { + gap: 3rem !important; } + .row-gap-sm-0 { + row-gap: 0 !important; } + .row-gap-sm-1 { + row-gap: 0.25rem !important; } + .row-gap-sm-2 { + row-gap: 0.5rem !important; } + .row-gap-sm-3 { + row-gap: 1rem !important; } + .row-gap-sm-4 { + row-gap: 1.5rem !important; } + .row-gap-sm-5 { + row-gap: 3rem !important; } + .column-gap-sm-0 { + column-gap: 0 !important; } + .column-gap-sm-1 { + column-gap: 0.25rem !important; } + .column-gap-sm-2 { + column-gap: 0.5rem !important; } + .column-gap-sm-3 { + column-gap: 1rem !important; } + .column-gap-sm-4 { + column-gap: 1.5rem !important; } + .column-gap-sm-5 { + column-gap: 3rem !important; } + .text-sm-start { + text-align: left !important; } + .text-sm-end { + text-align: right !important; } + .text-sm-center { + text-align: center !important; } } + +@media (min-width: 768px) { + .float-md-start { + float: left !important; } + .float-md-end { + float: right !important; } + .float-md-none { + float: none !important; } + .object-fit-md-contain { + object-fit: contain !important; } + .object-fit-md-cover { + object-fit: cover !important; } + .object-fit-md-fill { + object-fit: fill !important; } + .object-fit-md-scale { + object-fit: scale-down !important; } + .object-fit-md-none { + object-fit: none !important; } + .d-md-inline { + display: inline !important; } + .d-md-inline-block { + display: inline-block !important; } + .d-md-block { + display: block !important; } + .d-md-grid { + display: grid !important; } + .d-md-inline-grid { + display: inline-grid !important; } + .d-md-table { + display: table !important; } + .d-md-table-row { + display: table-row !important; } + .d-md-table-cell { + display: table-cell !important; } + .d-md-flex { + display: flex !important; } + .d-md-inline-flex { + display: inline-flex !important; } + .d-md-none { + display: none !important; } + .flex-md-fill { + flex: 1 1 auto !important; } + .flex-md-row { + flex-direction: row !important; } + .flex-md-column { + flex-direction: column !important; } + .flex-md-row-reverse { + flex-direction: row-reverse !important; } + .flex-md-column-reverse { + flex-direction: column-reverse !important; } + .flex-md-grow-0 { + flex-grow: 0 !important; } + .flex-md-grow-1 { + flex-grow: 1 !important; } + .flex-md-shrink-0 { + flex-shrink: 0 !important; } + .flex-md-shrink-1 { + flex-shrink: 1 !important; } + .flex-md-wrap { + flex-wrap: wrap !important; } + .flex-md-nowrap { + flex-wrap: nowrap !important; } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-md-start { + justify-content: flex-start !important; } + .justify-content-md-end { + justify-content: flex-end !important; } + .justify-content-md-center { + justify-content: center !important; } + .justify-content-md-between { + justify-content: space-between !important; } + .justify-content-md-around { + justify-content: space-around !important; } + .justify-content-md-evenly { + justify-content: space-evenly !important; } + .align-items-md-start { + align-items: flex-start !important; } + .align-items-md-end { + align-items: flex-end !important; } + .align-items-md-center { + align-items: center !important; } + .align-items-md-baseline { + align-items: baseline !important; } + .align-items-md-stretch { + align-items: stretch !important; } + .align-content-md-start { + align-content: flex-start !important; } + .align-content-md-end { + align-content: flex-end !important; } + .align-content-md-center { + align-content: center !important; } + .align-content-md-between { + align-content: space-between !important; } + .align-content-md-around { + align-content: space-around !important; } + .align-content-md-stretch { + align-content: stretch !important; } + .align-self-md-auto { + align-self: auto !important; } + .align-self-md-start { + align-self: flex-start !important; } + .align-self-md-end { + align-self: flex-end !important; } + .align-self-md-center { + align-self: center !important; } + .align-self-md-baseline { + align-self: baseline !important; } + .align-self-md-stretch { + align-self: stretch !important; } + .order-md-first { + order: -1 !important; } + .order-md-0 { + order: 0 !important; } + .order-md-1 { + order: 1 !important; } + .order-md-2 { + order: 2 !important; } + .order-md-3 { + order: 3 !important; } + .order-md-4 { + order: 4 !important; } + .order-md-5 { + order: 5 !important; } + .order-md-last { + order: 6 !important; } + .m-md-0 { + margin: 0 !important; } + .m-md-1 { + margin: 0.25rem !important; } + .m-md-2 { + margin: 0.5rem !important; } + .m-md-3 { + margin: 1rem !important; } + .m-md-4 { + margin: 1.5rem !important; } + .m-md-5 { + margin: 3rem !important; } + .m-md-auto { + margin: auto !important; } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-md-0 { + margin-top: 0 !important; } + .mt-md-1 { + margin-top: 0.25rem !important; } + .mt-md-2 { + margin-top: 0.5rem !important; } + .mt-md-3 { + margin-top: 1rem !important; } + .mt-md-4 { + margin-top: 1.5rem !important; } + .mt-md-5 { + margin-top: 3rem !important; } + .mt-md-auto { + margin-top: auto !important; } + .me-md-0 { + margin-right: 0 !important; } + .me-md-1 { + margin-right: 0.25rem !important; } + .me-md-2 { + margin-right: 0.5rem !important; } + .me-md-3 { + margin-right: 1rem !important; } + .me-md-4 { + margin-right: 1.5rem !important; } + .me-md-5 { + margin-right: 3rem !important; } + .me-md-auto { + margin-right: auto !important; } + .mb-md-0 { + margin-bottom: 0 !important; } + .mb-md-1 { + margin-bottom: 0.25rem !important; } + .mb-md-2 { + margin-bottom: 0.5rem !important; } + .mb-md-3 { + margin-bottom: 1rem !important; } + .mb-md-4 { + margin-bottom: 1.5rem !important; } + .mb-md-5 { + margin-bottom: 3rem !important; } + .mb-md-auto { + margin-bottom: auto !important; } + .ms-md-0 { + margin-left: 0 !important; } + .ms-md-1 { + margin-left: 0.25rem !important; } + .ms-md-2 { + margin-left: 0.5rem !important; } + .ms-md-3 { + margin-left: 1rem !important; } + .ms-md-4 { + margin-left: 1.5rem !important; } + .ms-md-5 { + margin-left: 3rem !important; } + .ms-md-auto { + margin-left: auto !important; } + .p-md-0 { + padding: 0 !important; } + .p-md-1 { + padding: 0.25rem !important; } + .p-md-2 { + padding: 0.5rem !important; } + .p-md-3 { + padding: 1rem !important; } + .p-md-4 { + padding: 1.5rem !important; } + .p-md-5 { + padding: 3rem !important; } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-md-0 { + padding-top: 0 !important; } + .pt-md-1 { + padding-top: 0.25rem !important; } + .pt-md-2 { + padding-top: 0.5rem !important; } + .pt-md-3 { + padding-top: 1rem !important; } + .pt-md-4 { + padding-top: 1.5rem !important; } + .pt-md-5 { + padding-top: 3rem !important; } + .pe-md-0 { + padding-right: 0 !important; } + .pe-md-1 { + padding-right: 0.25rem !important; } + .pe-md-2 { + padding-right: 0.5rem !important; } + .pe-md-3 { + padding-right: 1rem !important; } + .pe-md-4 { + padding-right: 1.5rem !important; } + .pe-md-5 { + padding-right: 3rem !important; } + .pb-md-0 { + padding-bottom: 0 !important; } + .pb-md-1 { + padding-bottom: 0.25rem !important; } + .pb-md-2 { + padding-bottom: 0.5rem !important; } + .pb-md-3 { + padding-bottom: 1rem !important; } + .pb-md-4 { + padding-bottom: 1.5rem !important; } + .pb-md-5 { + padding-bottom: 3rem !important; } + .ps-md-0 { + padding-left: 0 !important; } + .ps-md-1 { + padding-left: 0.25rem !important; } + .ps-md-2 { + padding-left: 0.5rem !important; } + .ps-md-3 { + padding-left: 1rem !important; } + .ps-md-4 { + padding-left: 1.5rem !important; } + .ps-md-5 { + padding-left: 3rem !important; } + .gap-md-0 { + gap: 0 !important; } + .gap-md-1 { + gap: 0.25rem !important; } + .gap-md-2 { + gap: 0.5rem !important; } + .gap-md-3 { + gap: 1rem !important; } + .gap-md-4 { + gap: 1.5rem !important; } + .gap-md-5 { + gap: 3rem !important; } + .row-gap-md-0 { + row-gap: 0 !important; } + .row-gap-md-1 { + row-gap: 0.25rem !important; } + .row-gap-md-2 { + row-gap: 0.5rem !important; } + .row-gap-md-3 { + row-gap: 1rem !important; } + .row-gap-md-4 { + row-gap: 1.5rem !important; } + .row-gap-md-5 { + row-gap: 3rem !important; } + .column-gap-md-0 { + column-gap: 0 !important; } + .column-gap-md-1 { + column-gap: 0.25rem !important; } + .column-gap-md-2 { + column-gap: 0.5rem !important; } + .column-gap-md-3 { + column-gap: 1rem !important; } + .column-gap-md-4 { + column-gap: 1.5rem !important; } + .column-gap-md-5 { + column-gap: 3rem !important; } + .text-md-start { + text-align: left !important; } + .text-md-end { + text-align: right !important; } + .text-md-center { + text-align: center !important; } } + +@media (min-width: 992px) { + .float-lg-start { + float: left !important; } + .float-lg-end { + float: right !important; } + .float-lg-none { + float: none !important; } + .object-fit-lg-contain { + object-fit: contain !important; } + .object-fit-lg-cover { + object-fit: cover !important; } + .object-fit-lg-fill { + object-fit: fill !important; } + .object-fit-lg-scale { + object-fit: scale-down !important; } + .object-fit-lg-none { + object-fit: none !important; } + .d-lg-inline { + display: inline !important; } + .d-lg-inline-block { + display: inline-block !important; } + .d-lg-block { + display: block !important; } + .d-lg-grid { + display: grid !important; } + .d-lg-inline-grid { + display: inline-grid !important; } + .d-lg-table { + display: table !important; } + .d-lg-table-row { + display: table-row !important; } + .d-lg-table-cell { + display: table-cell !important; } + .d-lg-flex { + display: flex !important; } + .d-lg-inline-flex { + display: inline-flex !important; } + .d-lg-none { + display: none !important; } + .flex-lg-fill { + flex: 1 1 auto !important; } + .flex-lg-row { + flex-direction: row !important; } + .flex-lg-column { + flex-direction: column !important; } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; } + .flex-lg-grow-0 { + flex-grow: 0 !important; } + .flex-lg-grow-1 { + flex-grow: 1 !important; } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; } + .flex-lg-wrap { + flex-wrap: wrap !important; } + .flex-lg-nowrap { + flex-wrap: nowrap !important; } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-lg-start { + justify-content: flex-start !important; } + .justify-content-lg-end { + justify-content: flex-end !important; } + .justify-content-lg-center { + justify-content: center !important; } + .justify-content-lg-between { + justify-content: space-between !important; } + .justify-content-lg-around { + justify-content: space-around !important; } + .justify-content-lg-evenly { + justify-content: space-evenly !important; } + .align-items-lg-start { + align-items: flex-start !important; } + .align-items-lg-end { + align-items: flex-end !important; } + .align-items-lg-center { + align-items: center !important; } + .align-items-lg-baseline { + align-items: baseline !important; } + .align-items-lg-stretch { + align-items: stretch !important; } + .align-content-lg-start { + align-content: flex-start !important; } + .align-content-lg-end { + align-content: flex-end !important; } + .align-content-lg-center { + align-content: center !important; } + .align-content-lg-between { + align-content: space-between !important; } + .align-content-lg-around { + align-content: space-around !important; } + .align-content-lg-stretch { + align-content: stretch !important; } + .align-self-lg-auto { + align-self: auto !important; } + .align-self-lg-start { + align-self: flex-start !important; } + .align-self-lg-end { + align-self: flex-end !important; } + .align-self-lg-center { + align-self: center !important; } + .align-self-lg-baseline { + align-self: baseline !important; } + .align-self-lg-stretch { + align-self: stretch !important; } + .order-lg-first { + order: -1 !important; } + .order-lg-0 { + order: 0 !important; } + .order-lg-1 { + order: 1 !important; } + .order-lg-2 { + order: 2 !important; } + .order-lg-3 { + order: 3 !important; } + .order-lg-4 { + order: 4 !important; } + .order-lg-5 { + order: 5 !important; } + .order-lg-last { + order: 6 !important; } + .m-lg-0 { + margin: 0 !important; } + .m-lg-1 { + margin: 0.25rem !important; } + .m-lg-2 { + margin: 0.5rem !important; } + .m-lg-3 { + margin: 1rem !important; } + .m-lg-4 { + margin: 1.5rem !important; } + .m-lg-5 { + margin: 3rem !important; } + .m-lg-auto { + margin: auto !important; } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-lg-0 { + margin-top: 0 !important; } + .mt-lg-1 { + margin-top: 0.25rem !important; } + .mt-lg-2 { + margin-top: 0.5rem !important; } + .mt-lg-3 { + margin-top: 1rem !important; } + .mt-lg-4 { + margin-top: 1.5rem !important; } + .mt-lg-5 { + margin-top: 3rem !important; } + .mt-lg-auto { + margin-top: auto !important; } + .me-lg-0 { + margin-right: 0 !important; } + .me-lg-1 { + margin-right: 0.25rem !important; } + .me-lg-2 { + margin-right: 0.5rem !important; } + .me-lg-3 { + margin-right: 1rem !important; } + .me-lg-4 { + margin-right: 1.5rem !important; } + .me-lg-5 { + margin-right: 3rem !important; } + .me-lg-auto { + margin-right: auto !important; } + .mb-lg-0 { + margin-bottom: 0 !important; } + .mb-lg-1 { + margin-bottom: 0.25rem !important; } + .mb-lg-2 { + margin-bottom: 0.5rem !important; } + .mb-lg-3 { + margin-bottom: 1rem !important; } + .mb-lg-4 { + margin-bottom: 1.5rem !important; } + .mb-lg-5 { + margin-bottom: 3rem !important; } + .mb-lg-auto { + margin-bottom: auto !important; } + .ms-lg-0 { + margin-left: 0 !important; } + .ms-lg-1 { + margin-left: 0.25rem !important; } + .ms-lg-2 { + margin-left: 0.5rem !important; } + .ms-lg-3 { + margin-left: 1rem !important; } + .ms-lg-4 { + margin-left: 1.5rem !important; } + .ms-lg-5 { + margin-left: 3rem !important; } + .ms-lg-auto { + margin-left: auto !important; } + .p-lg-0 { + padding: 0 !important; } + .p-lg-1 { + padding: 0.25rem !important; } + .p-lg-2 { + padding: 0.5rem !important; } + .p-lg-3 { + padding: 1rem !important; } + .p-lg-4 { + padding: 1.5rem !important; } + .p-lg-5 { + padding: 3rem !important; } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-lg-0 { + padding-top: 0 !important; } + .pt-lg-1 { + padding-top: 0.25rem !important; } + .pt-lg-2 { + padding-top: 0.5rem !important; } + .pt-lg-3 { + padding-top: 1rem !important; } + .pt-lg-4 { + padding-top: 1.5rem !important; } + .pt-lg-5 { + padding-top: 3rem !important; } + .pe-lg-0 { + padding-right: 0 !important; } + .pe-lg-1 { + padding-right: 0.25rem !important; } + .pe-lg-2 { + padding-right: 0.5rem !important; } + .pe-lg-3 { + padding-right: 1rem !important; } + .pe-lg-4 { + padding-right: 1.5rem !important; } + .pe-lg-5 { + padding-right: 3rem !important; } + .pb-lg-0 { + padding-bottom: 0 !important; } + .pb-lg-1 { + padding-bottom: 0.25rem !important; } + .pb-lg-2 { + padding-bottom: 0.5rem !important; } + .pb-lg-3 { + padding-bottom: 1rem !important; } + .pb-lg-4 { + padding-bottom: 1.5rem !important; } + .pb-lg-5 { + padding-bottom: 3rem !important; } + .ps-lg-0 { + padding-left: 0 !important; } + .ps-lg-1 { + padding-left: 0.25rem !important; } + .ps-lg-2 { + padding-left: 0.5rem !important; } + .ps-lg-3 { + padding-left: 1rem !important; } + .ps-lg-4 { + padding-left: 1.5rem !important; } + .ps-lg-5 { + padding-left: 3rem !important; } + .gap-lg-0 { + gap: 0 !important; } + .gap-lg-1 { + gap: 0.25rem !important; } + .gap-lg-2 { + gap: 0.5rem !important; } + .gap-lg-3 { + gap: 1rem !important; } + .gap-lg-4 { + gap: 1.5rem !important; } + .gap-lg-5 { + gap: 3rem !important; } + .row-gap-lg-0 { + row-gap: 0 !important; } + .row-gap-lg-1 { + row-gap: 0.25rem !important; } + .row-gap-lg-2 { + row-gap: 0.5rem !important; } + .row-gap-lg-3 { + row-gap: 1rem !important; } + .row-gap-lg-4 { + row-gap: 1.5rem !important; } + .row-gap-lg-5 { + row-gap: 3rem !important; } + .column-gap-lg-0 { + column-gap: 0 !important; } + .column-gap-lg-1 { + column-gap: 0.25rem !important; } + .column-gap-lg-2 { + column-gap: 0.5rem !important; } + .column-gap-lg-3 { + column-gap: 1rem !important; } + .column-gap-lg-4 { + column-gap: 1.5rem !important; } + .column-gap-lg-5 { + column-gap: 3rem !important; } + .text-lg-start { + text-align: left !important; } + .text-lg-end { + text-align: right !important; } + .text-lg-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; } + .float-xl-end { + float: right !important; } + .float-xl-none { + float: none !important; } + .object-fit-xl-contain { + object-fit: contain !important; } + .object-fit-xl-cover { + object-fit: cover !important; } + .object-fit-xl-fill { + object-fit: fill !important; } + .object-fit-xl-scale { + object-fit: scale-down !important; } + .object-fit-xl-none { + object-fit: none !important; } + .d-xl-inline { + display: inline !important; } + .d-xl-inline-block { + display: inline-block !important; } + .d-xl-block { + display: block !important; } + .d-xl-grid { + display: grid !important; } + .d-xl-inline-grid { + display: inline-grid !important; } + .d-xl-table { + display: table !important; } + .d-xl-table-row { + display: table-row !important; } + .d-xl-table-cell { + display: table-cell !important; } + .d-xl-flex { + display: flex !important; } + .d-xl-inline-flex { + display: inline-flex !important; } + .d-xl-none { + display: none !important; } + .flex-xl-fill { + flex: 1 1 auto !important; } + .flex-xl-row { + flex-direction: row !important; } + .flex-xl-column { + flex-direction: column !important; } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; } + .flex-xl-grow-0 { + flex-grow: 0 !important; } + .flex-xl-grow-1 { + flex-grow: 1 !important; } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; } + .flex-xl-wrap { + flex-wrap: wrap !important; } + .flex-xl-nowrap { + flex-wrap: nowrap !important; } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-xl-start { + justify-content: flex-start !important; } + .justify-content-xl-end { + justify-content: flex-end !important; } + .justify-content-xl-center { + justify-content: center !important; } + .justify-content-xl-between { + justify-content: space-between !important; } + .justify-content-xl-around { + justify-content: space-around !important; } + .justify-content-xl-evenly { + justify-content: space-evenly !important; } + .align-items-xl-start { + align-items: flex-start !important; } + .align-items-xl-end { + align-items: flex-end !important; } + .align-items-xl-center { + align-items: center !important; } + .align-items-xl-baseline { + align-items: baseline !important; } + .align-items-xl-stretch { + align-items: stretch !important; } + .align-content-xl-start { + align-content: flex-start !important; } + .align-content-xl-end { + align-content: flex-end !important; } + .align-content-xl-center { + align-content: center !important; } + .align-content-xl-between { + align-content: space-between !important; } + .align-content-xl-around { + align-content: space-around !important; } + .align-content-xl-stretch { + align-content: stretch !important; } + .align-self-xl-auto { + align-self: auto !important; } + .align-self-xl-start { + align-self: flex-start !important; } + .align-self-xl-end { + align-self: flex-end !important; } + .align-self-xl-center { + align-self: center !important; } + .align-self-xl-baseline { + align-self: baseline !important; } + .align-self-xl-stretch { + align-self: stretch !important; } + .order-xl-first { + order: -1 !important; } + .order-xl-0 { + order: 0 !important; } + .order-xl-1 { + order: 1 !important; } + .order-xl-2 { + order: 2 !important; } + .order-xl-3 { + order: 3 !important; } + .order-xl-4 { + order: 4 !important; } + .order-xl-5 { + order: 5 !important; } + .order-xl-last { + order: 6 !important; } + .m-xl-0 { + margin: 0 !important; } + .m-xl-1 { + margin: 0.25rem !important; } + .m-xl-2 { + margin: 0.5rem !important; } + .m-xl-3 { + margin: 1rem !important; } + .m-xl-4 { + margin: 1.5rem !important; } + .m-xl-5 { + margin: 3rem !important; } + .m-xl-auto { + margin: auto !important; } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xl-0 { + margin-top: 0 !important; } + .mt-xl-1 { + margin-top: 0.25rem !important; } + .mt-xl-2 { + margin-top: 0.5rem !important; } + .mt-xl-3 { + margin-top: 1rem !important; } + .mt-xl-4 { + margin-top: 1.5rem !important; } + .mt-xl-5 { + margin-top: 3rem !important; } + .mt-xl-auto { + margin-top: auto !important; } + .me-xl-0 { + margin-right: 0 !important; } + .me-xl-1 { + margin-right: 0.25rem !important; } + .me-xl-2 { + margin-right: 0.5rem !important; } + .me-xl-3 { + margin-right: 1rem !important; } + .me-xl-4 { + margin-right: 1.5rem !important; } + .me-xl-5 { + margin-right: 3rem !important; } + .me-xl-auto { + margin-right: auto !important; } + .mb-xl-0 { + margin-bottom: 0 !important; } + .mb-xl-1 { + margin-bottom: 0.25rem !important; } + .mb-xl-2 { + margin-bottom: 0.5rem !important; } + .mb-xl-3 { + margin-bottom: 1rem !important; } + .mb-xl-4 { + margin-bottom: 1.5rem !important; } + .mb-xl-5 { + margin-bottom: 3rem !important; } + .mb-xl-auto { + margin-bottom: auto !important; } + .ms-xl-0 { + margin-left: 0 !important; } + .ms-xl-1 { + margin-left: 0.25rem !important; } + .ms-xl-2 { + margin-left: 0.5rem !important; } + .ms-xl-3 { + margin-left: 1rem !important; } + .ms-xl-4 { + margin-left: 1.5rem !important; } + .ms-xl-5 { + margin-left: 3rem !important; } + .ms-xl-auto { + margin-left: auto !important; } + .p-xl-0 { + padding: 0 !important; } + .p-xl-1 { + padding: 0.25rem !important; } + .p-xl-2 { + padding: 0.5rem !important; } + .p-xl-3 { + padding: 1rem !important; } + .p-xl-4 { + padding: 1.5rem !important; } + .p-xl-5 { + padding: 3rem !important; } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xl-0 { + padding-top: 0 !important; } + .pt-xl-1 { + padding-top: 0.25rem !important; } + .pt-xl-2 { + padding-top: 0.5rem !important; } + .pt-xl-3 { + padding-top: 1rem !important; } + .pt-xl-4 { + padding-top: 1.5rem !important; } + .pt-xl-5 { + padding-top: 3rem !important; } + .pe-xl-0 { + padding-right: 0 !important; } + .pe-xl-1 { + padding-right: 0.25rem !important; } + .pe-xl-2 { + padding-right: 0.5rem !important; } + .pe-xl-3 { + padding-right: 1rem !important; } + .pe-xl-4 { + padding-right: 1.5rem !important; } + .pe-xl-5 { + padding-right: 3rem !important; } + .pb-xl-0 { + padding-bottom: 0 !important; } + .pb-xl-1 { + padding-bottom: 0.25rem !important; } + .pb-xl-2 { + padding-bottom: 0.5rem !important; } + .pb-xl-3 { + padding-bottom: 1rem !important; } + .pb-xl-4 { + padding-bottom: 1.5rem !important; } + .pb-xl-5 { + padding-bottom: 3rem !important; } + .ps-xl-0 { + padding-left: 0 !important; } + .ps-xl-1 { + padding-left: 0.25rem !important; } + .ps-xl-2 { + padding-left: 0.5rem !important; } + .ps-xl-3 { + padding-left: 1rem !important; } + .ps-xl-4 { + padding-left: 1.5rem !important; } + .ps-xl-5 { + padding-left: 3rem !important; } + .gap-xl-0 { + gap: 0 !important; } + .gap-xl-1 { + gap: 0.25rem !important; } + .gap-xl-2 { + gap: 0.5rem !important; } + .gap-xl-3 { + gap: 1rem !important; } + .gap-xl-4 { + gap: 1.5rem !important; } + .gap-xl-5 { + gap: 3rem !important; } + .row-gap-xl-0 { + row-gap: 0 !important; } + .row-gap-xl-1 { + row-gap: 0.25rem !important; } + .row-gap-xl-2 { + row-gap: 0.5rem !important; } + .row-gap-xl-3 { + row-gap: 1rem !important; } + .row-gap-xl-4 { + row-gap: 1.5rem !important; } + .row-gap-xl-5 { + row-gap: 3rem !important; } + .column-gap-xl-0 { + column-gap: 0 !important; } + .column-gap-xl-1 { + column-gap: 0.25rem !important; } + .column-gap-xl-2 { + column-gap: 0.5rem !important; } + .column-gap-xl-3 { + column-gap: 1rem !important; } + .column-gap-xl-4 { + column-gap: 1.5rem !important; } + .column-gap-xl-5 { + column-gap: 3rem !important; } + .text-xl-start { + text-align: left !important; } + .text-xl-end { + text-align: right !important; } + .text-xl-center { + text-align: center !important; } } + +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; } + .float-xxl-end { + float: right !important; } + .float-xxl-none { + float: none !important; } + .object-fit-xxl-contain { + object-fit: contain !important; } + .object-fit-xxl-cover { + object-fit: cover !important; } + .object-fit-xxl-fill { + object-fit: fill !important; } + .object-fit-xxl-scale { + object-fit: scale-down !important; } + .object-fit-xxl-none { + object-fit: none !important; } + .d-xxl-inline { + display: inline !important; } + .d-xxl-inline-block { + display: inline-block !important; } + .d-xxl-block { + display: block !important; } + .d-xxl-grid { + display: grid !important; } + .d-xxl-inline-grid { + display: inline-grid !important; } + .d-xxl-table { + display: table !important; } + .d-xxl-table-row { + display: table-row !important; } + .d-xxl-table-cell { + display: table-cell !important; } + .d-xxl-flex { + display: flex !important; } + .d-xxl-inline-flex { + display: inline-flex !important; } + .d-xxl-none { + display: none !important; } + .flex-xxl-fill { + flex: 1 1 auto !important; } + .flex-xxl-row { + flex-direction: row !important; } + .flex-xxl-column { + flex-direction: column !important; } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; } + .flex-xxl-grow-0 { + flex-grow: 0 !important; } + .flex-xxl-grow-1 { + flex-grow: 1 !important; } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; } + .flex-xxl-wrap { + flex-wrap: wrap !important; } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-xxl-start { + justify-content: flex-start !important; } + .justify-content-xxl-end { + justify-content: flex-end !important; } + .justify-content-xxl-center { + justify-content: center !important; } + .justify-content-xxl-between { + justify-content: space-between !important; } + .justify-content-xxl-around { + justify-content: space-around !important; } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; } + .align-items-xxl-start { + align-items: flex-start !important; } + .align-items-xxl-end { + align-items: flex-end !important; } + .align-items-xxl-center { + align-items: center !important; } + .align-items-xxl-baseline { + align-items: baseline !important; } + .align-items-xxl-stretch { + align-items: stretch !important; } + .align-content-xxl-start { + align-content: flex-start !important; } + .align-content-xxl-end { + align-content: flex-end !important; } + .align-content-xxl-center { + align-content: center !important; } + .align-content-xxl-between { + align-content: space-between !important; } + .align-content-xxl-around { + align-content: space-around !important; } + .align-content-xxl-stretch { + align-content: stretch !important; } + .align-self-xxl-auto { + align-self: auto !important; } + .align-self-xxl-start { + align-self: flex-start !important; } + .align-self-xxl-end { + align-self: flex-end !important; } + .align-self-xxl-center { + align-self: center !important; } + .align-self-xxl-baseline { + align-self: baseline !important; } + .align-self-xxl-stretch { + align-self: stretch !important; } + .order-xxl-first { + order: -1 !important; } + .order-xxl-0 { + order: 0 !important; } + .order-xxl-1 { + order: 1 !important; } + .order-xxl-2 { + order: 2 !important; } + .order-xxl-3 { + order: 3 !important; } + .order-xxl-4 { + order: 4 !important; } + .order-xxl-5 { + order: 5 !important; } + .order-xxl-last { + order: 6 !important; } + .m-xxl-0 { + margin: 0 !important; } + .m-xxl-1 { + margin: 0.25rem !important; } + .m-xxl-2 { + margin: 0.5rem !important; } + .m-xxl-3 { + margin: 1rem !important; } + .m-xxl-4 { + margin: 1.5rem !important; } + .m-xxl-5 { + margin: 3rem !important; } + .m-xxl-auto { + margin: auto !important; } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xxl-0 { + margin-top: 0 !important; } + .mt-xxl-1 { + margin-top: 0.25rem !important; } + .mt-xxl-2 { + margin-top: 0.5rem !important; } + .mt-xxl-3 { + margin-top: 1rem !important; } + .mt-xxl-4 { + margin-top: 1.5rem !important; } + .mt-xxl-5 { + margin-top: 3rem !important; } + .mt-xxl-auto { + margin-top: auto !important; } + .me-xxl-0 { + margin-right: 0 !important; } + .me-xxl-1 { + margin-right: 0.25rem !important; } + .me-xxl-2 { + margin-right: 0.5rem !important; } + .me-xxl-3 { + margin-right: 1rem !important; } + .me-xxl-4 { + margin-right: 1.5rem !important; } + .me-xxl-5 { + margin-right: 3rem !important; } + .me-xxl-auto { + margin-right: auto !important; } + .mb-xxl-0 { + margin-bottom: 0 !important; } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; } + .mb-xxl-3 { + margin-bottom: 1rem !important; } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; } + .mb-xxl-5 { + margin-bottom: 3rem !important; } + .mb-xxl-auto { + margin-bottom: auto !important; } + .ms-xxl-0 { + margin-left: 0 !important; } + .ms-xxl-1 { + margin-left: 0.25rem !important; } + .ms-xxl-2 { + margin-left: 0.5rem !important; } + .ms-xxl-3 { + margin-left: 1rem !important; } + .ms-xxl-4 { + margin-left: 1.5rem !important; } + .ms-xxl-5 { + margin-left: 3rem !important; } + .ms-xxl-auto { + margin-left: auto !important; } + .p-xxl-0 { + padding: 0 !important; } + .p-xxl-1 { + padding: 0.25rem !important; } + .p-xxl-2 { + padding: 0.5rem !important; } + .p-xxl-3 { + padding: 1rem !important; } + .p-xxl-4 { + padding: 1.5rem !important; } + .p-xxl-5 { + padding: 3rem !important; } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xxl-0 { + padding-top: 0 !important; } + .pt-xxl-1 { + padding-top: 0.25rem !important; } + .pt-xxl-2 { + padding-top: 0.5rem !important; } + .pt-xxl-3 { + padding-top: 1rem !important; } + .pt-xxl-4 { + padding-top: 1.5rem !important; } + .pt-xxl-5 { + padding-top: 3rem !important; } + .pe-xxl-0 { + padding-right: 0 !important; } + .pe-xxl-1 { + padding-right: 0.25rem !important; } + .pe-xxl-2 { + padding-right: 0.5rem !important; } + .pe-xxl-3 { + padding-right: 1rem !important; } + .pe-xxl-4 { + padding-right: 1.5rem !important; } + .pe-xxl-5 { + padding-right: 3rem !important; } + .pb-xxl-0 { + padding-bottom: 0 !important; } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; } + .pb-xxl-3 { + padding-bottom: 1rem !important; } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; } + .pb-xxl-5 { + padding-bottom: 3rem !important; } + .ps-xxl-0 { + padding-left: 0 !important; } + .ps-xxl-1 { + padding-left: 0.25rem !important; } + .ps-xxl-2 { + padding-left: 0.5rem !important; } + .ps-xxl-3 { + padding-left: 1rem !important; } + .ps-xxl-4 { + padding-left: 1.5rem !important; } + .ps-xxl-5 { + padding-left: 3rem !important; } + .gap-xxl-0 { + gap: 0 !important; } + .gap-xxl-1 { + gap: 0.25rem !important; } + .gap-xxl-2 { + gap: 0.5rem !important; } + .gap-xxl-3 { + gap: 1rem !important; } + .gap-xxl-4 { + gap: 1.5rem !important; } + .gap-xxl-5 { + gap: 3rem !important; } + .row-gap-xxl-0 { + row-gap: 0 !important; } + .row-gap-xxl-1 { + row-gap: 0.25rem !important; } + .row-gap-xxl-2 { + row-gap: 0.5rem !important; } + .row-gap-xxl-3 { + row-gap: 1rem !important; } + .row-gap-xxl-4 { + row-gap: 1.5rem !important; } + .row-gap-xxl-5 { + row-gap: 3rem !important; } + .column-gap-xxl-0 { + column-gap: 0 !important; } + .column-gap-xxl-1 { + column-gap: 0.25rem !important; } + .column-gap-xxl-2 { + column-gap: 0.5rem !important; } + .column-gap-xxl-3 { + column-gap: 1rem !important; } + .column-gap-xxl-4 { + column-gap: 1.5rem !important; } + .column-gap-xxl-5 { + column-gap: 3rem !important; } + .text-xxl-start { + text-align: left !important; } + .text-xxl-end { + text-align: right !important; } + .text-xxl-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; } + .fs-2 { + font-size: 2rem !important; } + .fs-3 { + font-size: 1.75rem !important; } + .fs-4 { + font-size: 1.5rem !important; } } + +@media print { + .d-print-inline { + display: inline !important; } + .d-print-inline-block { + display: inline-block !important; } + .d-print-block { + display: block !important; } + .d-print-grid { + display: grid !important; } + .d-print-inline-grid { + display: inline-grid !important; } + .d-print-table { + display: table !important; } + .d-print-table-row { + display: table-row !important; } + .d-print-table-cell { + display: table-cell !important; } + .d-print-flex { + display: flex !important; } + .d-print-inline-flex { + display: inline-flex !important; } + .d-print-none { + display: none !important; } } + +.table > thead > tr > th { + background-color: #3c3834; + color: #f1f1f1; } + +.table-filter { + background-color: #34302D; + padding: 9px 12px; } + +.nav > li > a { + color: #838789; } + +.btn-primary { + margin-top: 12px; + border-width: 2px; + transition: border 0.15s; + color: #f1f1f1; + background: #34302D; + border-color: #6db33f; + -webkit-transition: border 0.15s; + -moz-transition: border 0.15s; + -o-transition: border 0.15s; + -ms-transition: border 0.15s; } + .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, + .btn-primary .open .dropdown-toggle { + background-color: #34302D; + border-color: #34302D; } + +.container .text-muted { + margin: 20px 0; } + +code { + font-size: 80%; } + +.xd-container { + margin-top: 40px; + margin-bottom: 100px; + padding-left: 5px; + padding-right: 5px; } + +h1, .h1 { + margin-bottom: 15px; } + +.index-page--subtitle { + font-size: 16px; + line-height: 24px; + margin: 0 0 30px; } + +.form-horizontal button.btn-inverse { + margin-left: 32px; } + +#job-params-modal .modal-dialog { + width: 90%; + margin-left: auto; + margin-right: auto; } + +[ng-cloak].splash { + display: block !important; } + +[ng-cloak] { + display: none; } + +.splash { + background: #6db33f; + color: #34302D; + display: none; } + +.error-page { + margin-top: 100px; + text-align: center; } + +.error-page .error-title { + font-size: 24px; + line-height: 24px; + margin: 30px 0 0; } + +table td { + vertical-align: middle; } + +table td .progress { + margin-bottom: 0; } + +table td.action-column { + width: 1px; } + +.help-block { + color: #b6afaa; } + +.xd-containers { + font-size: 15px; } + +.cluster-view > table td { + vertical-align: top; } + +.cluster-view .label, .cluster-view .column-block { + display: block; } + +.cluster-view .input-group-addon { + width: 0%; } + +.cluster-view { + margin-bottom: 0; } + +.container-details-table th { + background-color: #3c3834; + color: #f1f1f1; } + +.status-help-content-table td { + color: #34302D; } + +.logo { + width: 200px; } + +.myspinner { + animation-name: spinner; + animation-duration: 2s; + animation-iteration-count: infinite; + animation-timing-function: linear; + -webkit-transform-origin: 49% 50%; + -webkit-animation-name: spinner; + -webkit-animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; } + +hr { + border-top: 1px dotted #34302D; } + +@font-face { + font-family: 'varela_roundregular'; + src: url("../fonts/varela_round-webfont.eot"); + src: url("../fonts/varela_round-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/varela_round-webfont.woff") format("woff"), url("../fonts/varela_round-webfont.ttf") format("truetype"), url("../fonts/varela_round-webfont.svg#varela_roundregular") format("svg"); + font-weight: normal; + font-style: normal; } + +@font-face { + font-family: 'montserratregular'; + src: url("../fonts/montserrat-webfont.eot"); + src: url("../fonts/montserrat-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/montserrat-webfont.woff") format("woff"), url("../fonts/montserrat-webfont.ttf") format("truetype"), url("../fonts/montserrat-webfont.svg#montserratregular") format("svg"); + font-weight: normal; + font-style: normal; } + +body, h1, .h1, h2, .h2, h3, .h3, p, input { + margin: 0; + font-weight: 400; + font-family: "varela_roundregular", sans-serif; + color: #34302d; } + +h1, .h1 { + font-size: 24px; + line-height: 30px; + font-family: "montserratregular", sans-serif; } + +h2, .h2 { + font-size: 18px; + font-weight: 700; + line-height: 24px; + margin-bottom: 10px; + font-family: "montserratregular", sans-serif; } + +h3, .h3 { + font-size: 16px; + line-height: 24px; + margin-bottom: 10px; + font-weight: 700; } + +strong { + font-weight: 700; + font-family: "montserratregular", sans-serif; } + +.navbar { + border-top: 4px solid #6db33f; + background-color: #34302d; + margin-bottom: 0px; + border-bottom: 0; + border-left: 0; + border-right: 0; } + +.navbar a.navbar-brand { + background: url("../images/spring-logo-dataflow.png") -1px -1px no-repeat; + margin: 12px 0 6px; + width: 229px; + height: 46px; + display: inline-block; + text-decoration: none; + padding: 0; } + +.navbar a.navbar-brand span { + display: block; + width: 229px; + height: 46px; + background: url("../images/spring-logo-dataflow.png") -1px -48px no-repeat; + opacity: 0; + -moz-transition: opacity 0.12s ease-in-out; + -webkit-transition: opacity 0.12s ease-in-out; + -o-transition: opacity 0.12s ease-in-out; } + +.navbar a:hover.navbar-brand span { + opacity: 1; } + +.navbar li > a, .navbar-text { + font-family: "montserratregular", sans-serif; + text-shadow: none; + font-size: 14px; + /* line-height: 14px; */ + padding: 28px 20px; + transition: all 0.15s; + -webkit-transition: all 0.15s; + -moz-transition: all 0.15s; + -o-transition: all 0.15s; + -ms-transition: all 0.15s; } + +.navbar li > a { + text-transform: uppercase; } + +.navbar .navbar-text { + margin-top: 0; + margin-bottom: 0; } + +.navbar li:hover > a { + color: #eeeeee; + background-color: #6db33f; } + +.navbar-toggle { + border-width: 0; } + .navbar-toggle .icon-bar + .icon-bar { + margin-top: 3px; } + .navbar-toggle .icon-bar { + width: 19px; + height: 3px; } + +@media (max-width: 768px) { + .navbar-toggle { + position: absolute; + z-index: 9999; + left: 0px; + top: 0px; } + .navbar a.navbar-brand { + display: block; + margin: 0 auto 0 auto; + width: 148px; + height: 50px; + float: none; + background: url("../images/spring-logo-dataflow-mobile.png") 0 center no-repeat; } + .homepage-billboard .homepage-subtitle { + font-size: 21px; + line-height: 21px; } + .navbar a.navbar-brand span { + display: none; } + .navbar { + border-top-width: 0; } + .xd-container { + margin-top: 20px; + margin-bottom: 30px; } + .index-page--subtitle { + margin-top: 10px; + margin-bottom: 30px; } } + +/*# sourceMappingURL=../../../../../../target/petclinic.css.map */ \ No newline at end of file diff --git a/src/main/resources/static/resources/fonts/montserrat-webfont.eot b/src/main/resources/static/resources/fonts/montserrat-webfont.eot new file mode 100644 index 0000000..0caea91 Binary files /dev/null and b/src/main/resources/static/resources/fonts/montserrat-webfont.eot differ diff --git a/src/main/resources/static/resources/fonts/montserrat-webfont.svg b/src/main/resources/static/resources/fonts/montserrat-webfont.svg new file mode 100644 index 0000000..7bd96bd --- /dev/null +++ b/src/main/resources/static/resources/fonts/montserrat-webfont.svg @@ -0,0 +1,1283 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="montserratregular" horiz-adv-x="561" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="500" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode=" " horiz-adv-x="681" /> +<glyph unicode=" " /> +<glyph unicode="!" horiz-adv-x="604" d="M152 136.5q0 62.5 45 107.5t107.5 45t107.5 -45t45 -107.5t-45 -107.5t-107.5 -45t-107.5 45t-45 107.5zM160 1202v264h286v-264l-61 -739h-164z" /> +<glyph unicode=""" horiz-adv-x="765" d="M158 928v504h159v-504h-159zM449 928v504h159v-504h-159z" /> +<glyph unicode="#" horiz-adv-x="1505" d="M88 328l45 225h205l59 340h-233l45 225h227l60 348h227l-59 -348h301l59 348h229l-63 -348h229l-45 -225h-221l-59 -340h252l-46 -225h-243l-58 -328h-227l57 328h-301l-57 -328h-229l57 328h-211zM565 553h301l62 340h-301z" /> +<glyph unicode="$" horiz-adv-x="1267" d="M76 225l149 178q172 -150 355 -178v398q-231 55 -339 145t-108 267t124 290t323 123v102h131v-104q225 -16 426 -154l-133 -188q-135 96 -293 119v-385h6q236 -55 346.5 -149.5t110.5 -273.5t-127 -292t-336 -123v-147h-131v149q-281 29 -504 223zM383 1059.5 q0 -68.5 41 -108.5t156 -77v355q-93 -8 -145 -54.5t-52 -115zM711 219q98 10 155.5 57.5t57.5 119t-45 113.5t-168 79v-369z" /> +<glyph unicode="%" horiz-adv-x="1609" d="M90 1139q0 135 89 231t221 96t220.5 -95t88.5 -230t-89.5 -231.5t-221.5 -96.5t-220 95.5t-88 230.5zM141 0l1049 1432h264l-1048 -1432h-265zM281 1136.5q0 -61.5 34.5 -103.5t85 -42t83 42t32.5 103.5t-35 103.5t-85 42t-82.5 -42t-32.5 -103.5zM903 309 q0 135 89 231.5t221.5 96.5t220.5 -95.5t88 -230.5t-89.5 -231t-221.5 -96t-220 95t-88 230zM1098 303.5q0 -61.5 34.5 -103.5t85 -42t83 42t32.5 103.5t-34.5 103.5t-85 42t-83 -42t-32.5 -103.5z" /> +<glyph unicode="&" horiz-adv-x="1421" d="M100 401q0 231 336 412q-84 96 -117.5 157.5t-33.5 155.5q0 164 120.5 252t284.5 88t278.5 -84t114.5 -235q0 -203 -327 -383q164 -201 266 -307q63 94 98 219l168 -119q-53 -141 -121 -248q82 -84 209 -203l-153 -143l-189 187q-180 -166 -450 -166q-201 0 -342.5 111.5 t-141.5 305.5zM328 391q0 -92 77.5 -150.5t206.5 -58.5t275 119q-207 217 -328 365q-231 -125 -231 -275zM512 1140.5q0 -57.5 27.5 -103.5t95.5 -128q231 115 231 213q0 82 -54 122t-122.5 40t-123 -43t-54.5 -100.5z" /> +<glyph unicode="'" horiz-adv-x="475" d="M158 928v504h159v-504h-159z" /> +<glyph unicode="(" horiz-adv-x="679" d="M102 639q0 256 83 514t184 397h243q-119 -166 -200.5 -421t-81.5 -490.5t82 -490t200 -420.5h-243q-100 139 -183.5 397t-83.5 514z" /> +<glyph unicode=")" horiz-adv-x="679" d="M68 -272q119 166 200.5 420.5t81.5 490t-82 490.5t-200 421h243q100 -139 183.5 -397t83.5 -514t-83 -514t-184 -397h-243z" /> +<glyph unicode="*" horiz-adv-x="884" d="M125 1001l209 105l-209 102l70 121l192 -129l-14 232h139l-14 -232l192 127l70 -119l-211 -102l211 -105l-70 -120l-194 131l16 -234h-139l16 236l-194 -131z" /> +<glyph unicode="+" horiz-adv-x="1163" d="M98 696v193h391v385h185v-385h391v-193h-391v-389h-185v389h-391z" /> +<glyph unicode="," horiz-adv-x="575" d="M135 133q0 66 45 110t106.5 44t107.5 -44t46 -105.5t-55 -149.5l-123 -203h-119l76 213q-84 39 -84 135z" /> +<glyph unicode="-" horiz-adv-x="974" d="M147 504v215h680v-215h-680z" /> +<glyph unicode="." horiz-adv-x="573" d="M135 137.5q0 63.5 44 107.5t107.5 44t108.5 -44t45 -107.5t-45 -108.5t-108.5 -45t-107.5 45t-44 108.5z" /> +<glyph unicode="/" horiz-adv-x="1202" d="M57 -240l887 1901h205l-887 -1901h-205z" /> +<glyph unicode="0" horiz-adv-x="1409" d="M121 725q0 338 145.5 539.5t438 201.5t438 -201.5t145.5 -539.5t-145.5 -539.5t-438 -201.5t-438 201.5t-145.5 539.5zM354 725q0 -240 85 -387.5t265.5 -147.5t263.5 146.5t83 388.5t-83 388.5t-263.5 146.5t-265.5 -147.5t-85 -387.5z" /> +<glyph unicode="1" horiz-adv-x="780" d="M59 1217v215h521v-1432h-230v1217h-291z" /> +<glyph unicode="2" horiz-adv-x="1206" d="M102 1182q94 141 208 212.5t293 71.5t314.5 -113.5t135.5 -310.5q0 -111 -57.5 -211t-211.5 -258l-335 -342h649v-231h-979v205l434 436q145 147 206.5 231t61.5 170t-65.5 146.5t-165.5 60.5q-176 0 -293 -180z" /> +<glyph unicode="3" horiz-adv-x="1183" d="M80 131l102 195q176 -123 369 -123q125 0 206 58t81 168t-90.5 175.5t-249.5 65.5q-80 0 -154 -23v184l332 386h-518v215h837v-189l-346 -387q197 -6 307.5 -124t110.5 -281q0 -219 -148.5 -344t-382 -125t-456.5 149z" /> +<glyph unicode="4" horiz-adv-x="1171" d="M76 360v213l526 859h264l-518 -852h342v262h230v-262h172v-220h-172v-360h-230v360h-614z" /> +<glyph unicode="5" horiz-adv-x="1185" d="M102 176l129 176q16 -16 44 -38.5t114 -60.5t188.5 -38t186.5 61.5t84 179t-89 182t-225.5 64.5t-259.5 -67l-102 110v689h823v-220h-604v-352q90 49 205 49q201 0 346 -120.5t145 -327.5t-151.5 -343t-372.5 -136q-289 0 -461 192z" /> +<glyph unicode="6" horiz-adv-x="1269" d="M123 688q0 221 47 368.5t129 233.5q160 168 392.5 168t420.5 -145l-121 -178q-47 41 -126 73.5t-140 32.5q-190 0 -280.5 -129t-92.5 -348q51 57 147.5 107.5t213.5 50.5q193 0 322.5 -128t129.5 -340t-140 -341t-353 -129q-344 0 -475 307q-74 176 -74 397zM391 461.5 q0 -109.5 80 -188t201 -78.5t200.5 70.5t79.5 180t-73.5 186.5t-197.5 77t-207 -69t-83 -178.5z" /> +<glyph unicode="7" horiz-adv-x="1159" d="M94 1020v412h1008v-215l-606 -1217h-267l592 1212h-508v-192h-219z" /> +<glyph unicode="8" horiz-adv-x="1302" d="M117 418q0 238 207 368q-154 127 -154 292t137 273.5t344 108.5t344.5 -108.5t137.5 -273.5t-154 -292q207 -131 207 -368q0 -184 -147.5 -309t-387 -125t-387 124.5t-147.5 309.5zM356 426q0 -113 94.5 -173t201 -60t200.5 60t94 173t-90 174.5t-204.5 61.5t-205 -61.5 t-90.5 -174.5zM393 1058q0 -91 77 -153.5t181.5 -62.5t181 62.5t76.5 153.5t-76.5 152.5t-181 61.5t-181.5 -61.5t-77 -152.5z" /> +<glyph unicode="9" horiz-adv-x="1267" d="M104 988q0 212 140.5 341t353.5 129q344 0 475 -307q74 -176 74 -397.5t-47 -368.5t-129 -233q-160 -168 -392.5 -168t-420.5 145l121 178q47 -41 126 -73.5t140 -32.5q190 0 280 129t93 348q-51 -57 -147.5 -107.5t-213.5 -50.5q-193 0 -323 128t-130 340zM324 995.5 q0 -110.5 70.5 -186.5t194.5 -76t207 68.5t83 178.5t-80 188.5t-200 78.5t-197.5 -70.5t-77.5 -181z" /> +<glyph unicode=":" horiz-adv-x="600" d="M147 137.5q0 63.5 44.5 107.5t107.5 44t108.5 -44t45.5 -107.5t-45.5 -108.5t-108.5 -45t-107.5 45t-44.5 108.5zM147 638.5q0 63.5 44.5 108t107.5 44.5t108.5 -44.5t45.5 -108t-45.5 -108.5t-108.5 -45t-107.5 45t-44.5 108.5z" /> +<glyph unicode=";" horiz-adv-x="606" d="M150 135q0 66 45 110t107.5 44t108.5 -44t46 -103.5t-56 -153.5l-125 -203h-118l75 213q-83 43 -83 137zM150 638.5q0 63.5 44 108t107.5 44.5t108.5 -44.5t45 -108t-45 -108.5t-108.5 -45t-107.5 45t-44 108.5z" /> +<glyph unicode="<" horiz-adv-x="1212" d="M92 684v258l965 447v-234l-721 -326v-22l721 -334v-233z" /> +<glyph unicode="=" horiz-adv-x="1277" d="M123 504v192h1032v-192h-1032zM123 889v192h1032v-192h-1032z" /> +<glyph unicode=">" horiz-adv-x="1212" d="M156 240v233l721 334v22l-721 326v234l964 -447v-258z" /> +<glyph unicode="?" horiz-adv-x="1040" d="M74 1073q20 182 142 285.5t304 103.5t297 -99t115 -278q0 -123 -68 -204q-39 -49 -59.5 -69.5t-54 -52.5t-57 -55.5t-38.5 -39.5q-37 -45 -37 -127v-93h-231v125q0 82 19.5 122t85.5 106l149 149q47 51 47 127t-49 126t-127 50t-130 -48t-60 -128h-248zM348 140.5 q0 62.5 46 107.5t110.5 45t112 -44t47.5 -106.5t-46.5 -107.5t-111 -45t-111.5 44t-47 106.5z" /> +<glyph unicode="@" horiz-adv-x="1851" d="M104 545q0 344 244 588.5t589 244.5t581.5 -244.5t236.5 -596.5q0 -221 -84 -357.5t-223 -136.5q-100 0 -159.5 68.5t-63.5 195.5q-115 -264 -367 -264q-176 0 -310 141.5t-134 358.5t127 364.5t336 147.5q94 0 178 -49.5t121 -116.5v137h196v-715q0 -143 113 -143 q63 0 115.5 93t52.5 245q0 328 -198 555t-510 227t-531 -219t-219 -524t206.5 -509t511.5 -204q246 0 377 123l45 -76q-72 -61 -190.5 -99t-231.5 -38q-344 0 -576.5 229.5t-232.5 573.5zM621 552q0 -128 74.5 -223.5t203.5 -95.5t204 93.5t75 225.5t-78 218t-203 86 t-200.5 -88t-75.5 -216z" /> +<glyph unicode="A" horiz-adv-x="1519" d="M0 0l631 1432h258l631 -1432h-258l-144 326h-717l-143 -326h-258zM500 549h520l-260 590z" /> +<glyph unicode="B" horiz-adv-x="1445" d="M199 0v1432h557q145 0 250.5 -35t156.5 -94q98 -111 99 -250q0 -168 -107 -250q-39 -29 -53.5 -36t-50.5 -24q133 -29 211.5 -120t78.5 -226q0 -150 -102 -264q-121 -133 -414 -133h-626zM440 223h379q133 0 204 42t71 159q0 190 -306 190h-348v-391zM440 838h308 q262 0 262 178q0 102 -63.5 147t-196.5 45h-310v-370z" /> +<glyph unicode="C" horiz-adv-x="1507" d="M106 720.5q0 319.5 218.5 532.5t551 213t556.5 -245l-154 -168q-102 98 -193.5 137t-214.5 39q-217 0 -364.5 -140.5t-147.5 -358.5t146.5 -364.5t347.5 -146.5q125 0 215 42t188 134l156 -159q-227 -252 -551.5 -252t-539 208.5t-214.5 528z" /> +<glyph unicode="D" horiz-adv-x="1601" d="M199 0v1432h491q385 0 592 -187.5t207 -521.5t-201 -528.5t-614 -194.5h-475zM440 227h269q260 0 398 124t138 366q0 491 -561 491h-2h-242v-981z" /> +<glyph unicode="E" horiz-adv-x="1339" d="M199 0v1432h1005v-228h-764v-379h686v-215h-686v-383h789v-227h-1030z" /> +<glyph unicode="F" horiz-adv-x="1236" d="M199 0v1432h954l-2 -226h-711v-393h635v-223h-635v-590h-241z" /> +<glyph unicode="G" horiz-adv-x="1550" d="M106 720.5q0 319.5 218.5 532.5t527.5 213t514 -180l-129 -184q-84 72 -169 99.5t-198 27.5q-217 0 -364.5 -140.5t-147.5 -368.5t143.5 -366.5t347.5 -138.5t341 88v393h242v-489q-203 -223 -580 -223q-317 0 -531.5 208.5t-214.5 528z" /> +<glyph unicode="H" horiz-adv-x="1591" d="M199 0v1432h241v-621h711v621h242v-1432h-242v586h-711v-586h-241z" /> +<glyph unicode="I" horiz-adv-x="638" d="M199 0v1432h241v-1432h-241z" /> +<glyph unicode="J" horiz-adv-x="1128" d="M63 164l138 190q139 -133 272 -133q94 0 160.5 63.5t66.5 190.5v739h-454v218h696v-945q0 -250 -127 -374.5t-326 -124.5q-250 0 -426 176z" /> +<glyph unicode="K" horiz-adv-x="1441" d="M199 0v1432h241v-699l656 699h307l-576 -627l584 -805h-287l-475 627l-209 -226v-401h-241z" /> +<glyph unicode="L" horiz-adv-x="1159" d="M199 0v1432h241v-1203h654v-229h-895z" /> +<glyph unicode="M" horiz-adv-x="2013" d="M199 0v1432h376l433 -900l432 900h375v-1432h-242v1118l-500 -993h-135l-498 993v-1118h-241z" /> +<glyph unicode="N" horiz-adv-x="1712" d="M199 0v1432h241l832 -1070v1070h241v-1432h-262l-811 1044v-1044h-241z" /> +<glyph unicode="O" horiz-adv-x="1720" d="M106 726q0 316 217.5 528t537 212t536.5 -212t217 -528t-217 -528t-536.5 -212t-537 212t-217.5 528zM354 726q0 -216 146.5 -367.5t359.5 -151.5t359.5 151.5t146.5 367.5t-146.5 367.5t-359.5 151.5t-359.5 -151.5t-146.5 -367.5z" /> +<glyph unicode="P" horiz-adv-x="1400" d="M199 0v1432h491q326 0 475.5 -125t149.5 -385t-152.5 -381t-468.5 -121h-254v-420h-241zM440 639h281q201 0 273.5 77t72.5 225.5t-92 209.5t-289 61h-246v-573z" /> +<glyph unicode="Q" horiz-adv-x="1720" d="M106 726q0 316 217.5 528t537 212t536.5 -212t217 -527q0 -240 -129 -425t-344 -267q70 -92 176 -92q78 0 152.5 41t113.5 106l137 -190q-178 -188 -407 -189q-131 0 -252 74t-170 203l-31 -2q-319 0 -536.5 212t-217.5 528zM354 726q0 -216 146.5 -367.5t359.5 -151.5 t359.5 151.5t146.5 367.5t-146.5 367.5t-359.5 151.5t-359.5 -151.5t-146.5 -367.5z" /> +<glyph unicode="R" horiz-adv-x="1490" d="M199 0v1432h532q328 0 469 -110.5t141 -354.5q0 -354 -309 -447l375 -520h-307l-342 481h-318v-481h-241zM440 700h301q205 0 279 63.5t74 204t-76 192.5t-270 52h-308v-512z" /> +<glyph unicode="S" horiz-adv-x="1290" d="M82 215l151 182q217 -188 451 -188q117 0 185.5 50t68.5 133t-64.5 129t-222 84t-239.5 70t-146 83q-127 96 -127 294.5t144.5 306t357.5 107.5q137 0 272.5 -45t233.5 -127l-129 -182q-63 57 -172 94t-214.5 37t-173 -43t-67.5 -130t67.5 -133t288 -99.5t332 -149.5 t111.5 -283.5t-141.5 -304t-370.5 -116.5q-336 0 -596 231z" /> +<glyph unicode="T" horiz-adv-x="1236" d="M63 1210v222h1111v-222h-435v-1210h-241v1210h-435z" /> +<glyph unicode="U" horiz-adv-x="1572" d="M180 629v803h242v-793q0 -197 98 -311.5t266 -114.5t266.5 114.5t98.5 311.5v793h242v-803q0 -309 -170 -476t-436.5 -167t-436.5 166.5t-170 476.5z" /> +<glyph unicode="V" horiz-adv-x="1433" d="M6 1432h270l441 -1070l440 1070h270l-575 -1432h-270z" /> +<glyph unicode="W" horiz-adv-x="2146" d="M25 1432h260l360 -1031l320 1031h217l319 -1031l361 1031h260l-500 -1432h-240l-301 981h-16l-301 -981h-240z" /> +<glyph unicode="X" horiz-adv-x="1378" d="M31 0l491 735l-456 697h299l319 -484h10l320 484h299l-457 -697l492 -735h-301l-353 539h-10l-352 -539h-301z" /> +<glyph unicode="Y" horiz-adv-x="1277" d="M-16 1432h264l391 -652l391 652h264l-532 -867v-565h-246v565z" /> +<glyph unicode="Z" horiz-adv-x="1382" d="M96 0v186l834 1018v6h-807v222h1143v-189l-832 -1014v-6h844v-223h-1182z" /> +<glyph unicode="[" horiz-adv-x="727" d="M180 -287v1837h463v-172h-283v-1493h283v-172h-463z" /> +<glyph unicode="\" horiz-adv-x="1069" d="M57 1550h205l746 -1550h-205z" /> +<glyph unicode="]" horiz-adv-x="727" d="M84 -115h283v1493h-283v172h463v-1837h-463v172z" /> +<glyph unicode="^" horiz-adv-x="806" d="M45 1520l250 319h209l248 -319h-193l-158 170l-157 -170h-199z" /> +<glyph unicode="_" horiz-adv-x="1478" d="M147 -166h1184v-117h-1184v117z" /> +<glyph unicode="`" horiz-adv-x="1705" d="M647 1425l242 101l217 -297h-209z" /> +<glyph unicode="a" horiz-adv-x="1202" d="M84 337q0 161 119 240.5t321 79.5h297v41q0 217 -241 217q-152 0 -316 -110l-102 143q199 158 450 158q193 0 315 -97.5t122 -306.5v-702h-209v145q-134 -161 -360 -161h-3q-170 0 -281.5 96t-111.5 257zM313 342q0 -80 61.5 -122t171 -42t191.5 62t82 166v92h-258 q-248 0 -248 -156z" /> +<glyph unicode="b" horiz-adv-x="1376" d="M166 0v1520h229v-621q135 207 354.5 207t375 -151.5t155.5 -403.5t-154.5 -409.5t-360.5 -157.5t-370 180v-164h-229zM391 542.5q0 -155.5 94.5 -255t229.5 -99.5t235.5 98.5t100.5 255t-98.5 260t-235.5 103.5t-231.5 -103.5t-94.5 -259z" /> +<glyph unicode="c" horiz-adv-x="1179" d="M94 543q0 250 171 406.5t417 156.5t416 -170l-135 -166q-141 123 -284.5 123t-249 -95.5t-105.5 -246t104 -254.5t257 -104t288 139l135 -148q-199 -200 -459 -200q-227 0 -391 154.5t-164 404.5z" /> +<glyph unicode="d" horiz-adv-x="1376" d="M96 549q0 254 158 405.5t376 151.5t351 -184v598h229v-1520h-229v164q-127 -180 -371 -180q-207 0 -360.5 155.5t-153.5 409.5zM326 539.5q0 -156.5 100 -255t235.5 -98.5t229.5 99.5t94 255t-94 260t-231.5 104.5t-235.5 -104.5t-98 -261z" /> +<glyph unicode="e" horiz-adv-x="1265" d="M96 546q0 257 164 408.5t386 151.5t378 -134t156 -370v-158h-854q8 -119 108.5 -191.5t229.5 -72.5q205 0 311 129l131 -143q-176 -182 -459 -182q-229 0 -390 152.5t-161 409.5zM326 625h624q0 137 -86 210.5t-212 73.5t-226 -76.5t-100 -207.5z" /> +<glyph unicode="f" horiz-adv-x="790" d="M82 905v185h137v84q0 172 103.5 273t250 101t267.5 -108l-95 -162q-68 72 -141.5 72t-114 -46t-40.5 -124v-90h286v-185h-286v-905h-230v905h-137z" /> +<glyph unicode="g" horiz-adv-x="1339" d="M98 577.5q0 225.5 139.5 377t355.5 151.5t351 -178v162h230v-951q0 -289 -157 -433t-402.5 -144t-444.5 153l109 174q159 -121 321 -121h2q162 1 257 85t95 268v139q-51 -96 -146 -153.5t-214 -57.5q-217 0 -356.5 151.5t-139.5 377zM324 587q0 -134 82.5 -231.5 t223 -97.5t227.5 94t87 234.5t-88 238t-227.5 97.5t-222 -100.5t-82.5 -234.5z" /> +<glyph unicode="h" horiz-adv-x="1323" d="M166 0v1518h229v-627q49 100 148.5 157.5t214.5 57.5q184 0 297.5 -112.5t113.5 -325.5v-668h-229v598q0 301 -250 301q-119 0 -207 -78.5t-88 -230.5v-590h-229z" /> +<glyph unicode="i" d="M137 1409q0 59 43 102t102.5 43t102.5 -43t43 -102t-43 -102t-102.5 -43t-102.5 43t-43 102zM166 0v1090h229v-1090h-229z" /> +<glyph unicode="j" d="M-225 -326l106 172q69 -68 139 -68h2q70 1 107 46t37 125v1141h229v-1149q0 -172 -103.5 -273.5t-249.5 -101.5t-267 108zM133 1409q0 59 43 102t102.5 43t102.5 -43t43 -102t-43 -102t-102.5 -43t-102.5 43t-43 102z" /> +<glyph unicode="k" horiz-adv-x="1189" d="M166 0v1520h229v-893l443 463h295l-414 -433l444 -657h-278l-324 477l-166 -168v-309h-229z" /> +<glyph unicode="l" d="M166 0v1520h229v-1520h-229z" /> +<glyph unicode="m" horiz-adv-x="2076" d="M166 0v1090h229v-199q49 100 148.5 157.5t214.5 57.5q258 0 350 -213q162 213 403 213q184 0 298 -112.5t114 -325.5v-668h-229v598q0 301 -250 301q-117 0 -204 -74.5t-91 -218.5v-606h-229v598q0 156 -55.5 228.5t-174.5 72.5t-207 -78.5t-88 -230.5v-590h-229z" /> +<glyph unicode="n" horiz-adv-x="1323" d="M166 0v1090h229v-199q55 100 152.5 157.5t210.5 57.5q184 0 297.5 -112.5t113.5 -325.5v-668h-229v598q0 301 -250 301q-119 0 -207 -78.5t-88 -230.5v-590h-229z" /> +<glyph unicode="o" horiz-adv-x="1335" d="M94 544.5q0 235.5 164 398.5t409.5 163t409.5 -163t164 -398.5t-164 -398t-409.5 -162.5t-409.5 162.5t-164 398zM324 544.5q0 -157.5 97 -257t246.5 -99.5t247 99.5t97.5 257t-97.5 257t-247 99.5t-246.5 -99.5t-97 -257z" /> +<glyph unicode="p" horiz-adv-x="1376" d="M166 -397v1487h229v-191q135 207 354.5 207t375 -151.5t155.5 -403.5t-154.5 -409.5t-360.5 -157.5t-370 180v-561h-229zM391 542.5q0 -155.5 94.5 -255t229.5 -99.5t235.5 98.5t100.5 255t-98.5 260t-235.5 103.5t-231.5 -103.5t-94.5 -259z" /> +<glyph unicode="q" horiz-adv-x="1376" d="M96 551q0 252 156 403.5t375 151.5t354 -207v191h229v-1487h-229v561q-164 -180 -369.5 -180t-360.5 157.5t-155 409.5zM326 541.5q0 -156.5 100 -255t235.5 -98.5t229.5 99.5t94 255t-94 259t-231.5 103.5t-235.5 -103.5t-98 -260z" /> +<glyph unicode="r" horiz-adv-x="813" d="M166 0v1090h229v-220q55 102 150.5 168t202.5 68l2 -232h-13q-170 0 -256 -110.5t-86 -296.5v-467h-229z" /> +<glyph unicode="s" horiz-adv-x="1036" d="M68 147l110 179q190 -143 369 -144q78 0 123 36t45 91q0 82 -217 148q-16 6 -25 8q-340 92 -340 307q0 152 118 243t306 91t356 -111l-86 -170q-133 88 -288 88q-82 0 -133.5 -29.5t-51.5 -88.5q0 -53 54 -78q37 -18 103.5 -34.5t117.5 -33t99 -37t103 -57.5 q111 -74 111 -229.5t-112.5 -248.5t-288.5 -93q-119 0 -247 43t-226 120z" /> +<glyph unicode="t" horiz-adv-x="856" d="M82 905v185h137v342h230v-342h286v-185h-286v-553q0 -78 40.5 -124t114.5 -46t141 72l95 -162q-120 -109 -266 -109l-2 1q-146 0 -249.5 101t-103.5 273v547h-137z" /> +<glyph unicode="u" horiz-adv-x="1323" d="M154 422v668h229v-598q0 -301 250 -302q119 0 207 79t88 231v590h229v-1090h-229v199q-55 -100 -152.5 -157.5t-210.5 -57.5q-184 0 -297.5 112.5t-113.5 325.5z" /> +<glyph unicode="v" horiz-adv-x="1171" d="M16 1090h238l332 -824l332 824h237l-438 -1090h-262z" /> +<glyph unicode="w" horiz-adv-x="1867" d="M37 1090h237l271 -824l270 824h238l270 -824l270 824h238l-377 -1090h-262l-258 745l-258 -745h-262z" /> +<glyph unicode="x" horiz-adv-x="1142" d="M39 0l387 555l-367 535h281l233 -359l242 359h272l-380 -533l397 -557h-283l-260 362l-254 -362h-268z" /> +<glyph unicode="y" horiz-adv-x="1175" d="M18 1090h246l326 -803l325 803h246l-528 -1295q-47 -106 -135.5 -167.5t-194.5 -61.5q-150 0 -270 108l104 187q72 -68 148.5 -68t125 55.5t48.5 120.5q0 29 -441 1121z" /> +<glyph unicode="z" horiz-adv-x="1107" d="M90 0v223l596 666h-555v196h852v-206l-612 -680h645v-199h-926z" /> +<glyph unicode="{" horiz-adv-x="688" d="M82 537v190h49q53 0 77.5 28.5t24.5 98.5v426q0 270 279 270h70v-190q-7 2 -17 2q-127 0 -127 -117v-444q0 -143 -135 -168q135 -23 135 -166v-481q0 -53 30 -74t114 -21v-190h-70q-279 0 -279 270v443q0 68 -24.5 95.5t-77.5 27.5h-49z" /> +<glyph unicode="|" horiz-adv-x="526" d="M178 -313v1915h170v-1915h-170z" /> +<glyph unicode="}" horiz-adv-x="688" d="M106 -109q84 0 114 20.5t30 74.5v481q0 143 135 166q-135 25 -135 168v444q0 63 -34 91t-66 28h-7l-37 -4v190h70q279 0 279 -270v-426q0 -70 24.5 -98.5t77.5 -28.5h49v-190h-49q-53 0 -77.5 -28t-24.5 -95v-443q0 -270 -279 -270h-70v190z" /> +<glyph unicode="~" horiz-adv-x="1157" d="M102 676q12 143 86 216t191 73q92 0 248 -84q102 -53 151 -54q82 0 96 134l181 -52q-12 -143 -87 -217t-192 -74q-88 0 -248 87q-102 53 -151 53q-82 0 -96 -133z" /> +<glyph unicode=" " /> +<glyph unicode="¡" horiz-adv-x="602" d="M150 1307.5q0 62.5 45 107.5t107.5 45t107.5 -45t45 -107.5t-45 -107.5t-107.5 -45t-107.5 45t-45 107.5zM158 -16v258l61 739h164l59 -739v-258h-284z" /> +<glyph unicode="¢" horiz-adv-x="1200" d="M100 540.5q0 229.5 141.5 380t350.5 179.5v243h131v-239q231 -18 381 -168l-135 -166q-125 106 -246 119v-694q135 14 256 137l135 -148q-170 -174 -391 -196v-238h-131v238q-207 23 -349.5 173t-142.5 379.5zM330 550q0 -126 72.5 -220t189.5 -125v676 q-113 -27 -187.5 -116t-74.5 -215z" /> +<glyph unicode="£" horiz-adv-x="1261" d="M121 588v200h176v256q0 248 125 362t328 114q268 0 403 -230l-170 -135q-84 139 -217 139q-98 0 -162.5 -56t-64.5 -181v-269h342v-200h-342v-373h610v-215h-1020v215h168v373h-176z" /> +<glyph unicode="¤" horiz-adv-x="1546" d="M123 127l184 184q-109 147 -108.5 336t104.5 332l-180 180l145 144l185 -183q139 90 317 90t324 -92l184 185l145 -144l-182 -182q104 -147 104.5 -330.5t-110.5 -333.5l188 -186l-143 -143l-195 190q-137 -86 -313 -86t-313 86l-193 -190zM440 649.5q0 -151.5 94.5 -248 t237.5 -96.5t237.5 96.5t94.5 248t-94.5 246.5t-237.5 95t-237.5 -95t-94.5 -246.5z" /> +<glyph unicode="¥" horiz-adv-x="1464" d="M72 1432h264l387 -658h14l402 658h260l-426 -695h268v-180h-379l-6 -12v-111h385v-180h-387v-254h-256v254h-389v180h389v111l-8 12h-381v180h274z" /> +<glyph unicode="¦" horiz-adv-x="565" d="M186 -49v670h193v-670h-193zM186 881v669h193v-669h-193z" /> +<glyph unicode="§" horiz-adv-x="1249" d="M104 641q0 98 68 180t188 105q-166 66 -165.5 229.5t120 264t306.5 100.5q133 0 233 -33t205 -109l-117 -164q-152 113 -326 113q-94 0 -148 -43t-54 -111.5t59 -109.5t269 -91t314.5 -130t104.5 -230q0 -102 -65.5 -185t-204.5 -116q94 -35 141 -106.5t47 -147.5 q0 -141 -119.5 -240.5t-320.5 -99.5q-293 0 -518 201l131 156q201 -166 393 -166q219 0 219 139q0 66 -68.5 109t-268 101t-311.5 141t-112 243zM297 649q0 -96 120 -159.5t306 -63.5q106 0 177 45t71 111.5t-47 109.5t-121 66q-147 43 -261 43t-179.5 -40t-65.5 -112z" /> +<glyph unicode="¨" horiz-adv-x="1249" d="M340 1357q0 52 37 89t89 37t89 -36t37 -88t-38 -90t-90 -38t-88 37t-36 89zM719 1357q0 52 37 89t89 37t89 -36t37 -88t-37 -90t-89 -38t-89 37t-37 89z" /> +<glyph unicode="©" horiz-adv-x="1703" d="M111 715q0 305 217 524t524 219t524 -217t217 -522t-217 -524.5t-526 -219.5t-524 217.5t-215 522.5zM207 713.5q0 -269.5 186.5 -460t458.5 -190.5t461.5 193t189.5 461t-187.5 458.5t-459.5 190.5t-460.5 -191.5t-188.5 -461zM461 719q0 182 123 294.5t305 112.5 t299 -122l-98 -121q-106 90 -209 90t-179.5 -68.5t-76.5 -178.5t76.5 -185.5t188 -75.5t206.5 100l98 -106q-139 -145 -317.5 -145.5t-297 111.5t-118.5 294z" /> +<glyph unicode="ª" horiz-adv-x="720" d="M121 1110q0 150 203 150h139v18q0 100 -113 100q-68 0 -145 -51l-47 68q90 72 194 71q215 0 215 -186v-326h-96v68q-63 -76 -154.5 -76t-143.5 45t-52 119zM227 1112q0 -37 29 -56.5t79 -19.5t88 30t38 77v43h-119q-115 0 -115 -74z" /> +<glyph unicode="«" horiz-adv-x="1120" d="M115 492l243 360h222l-236 -360l236 -361h-222zM520 492l244 360h221l-235 -360l235 -361h-221z" /> +<glyph unicode="¬" horiz-adv-x="1695" d="M137 731v180h1370v-731h-168v551h-1202z" /> +<glyph unicode="­" horiz-adv-x="974" d="M147 504v215h680v-215h-680z" /> +<glyph unicode="®" horiz-adv-x="1703" d="M111 715q0 305 217 524t524 219t524 -217t217 -522t-217 -524.5t-526 -219.5t-524 217.5t-215 522.5zM207 713.5q0 -269.5 186.5 -460t458.5 -190.5t461.5 193t189.5 461t-187.5 458.5t-459.5 190.5t-460.5 -191.5t-188.5 -461zM569 322v800h301q182 0 261 -62.5 t79 -199.5q0 -199 -174 -250l213 -288h-172l-192 268h-176v-268h-140zM709 713h165q115 0 157 34.5t42 113.5t-43 109.5t-151 30.5h-170v-288z" /> +<glyph unicode="¯" horiz-adv-x="868" d="M121 1229v178h629v-178h-629z" /> +<glyph unicode="°" horiz-adv-x="851" d="M111 1149q0 131 92 223t223 92t223 -92t92 -223t-92 -222t-223 -91t-223 91t-92 222zM217 1149q0 -86 60.5 -147.5t147.5 -61.5t147.5 61.5t60.5 147.5t-60.5 146.5t-147.5 60.5t-147.5 -60.5t-60.5 -146.5z" /> +<glyph unicode="±" horiz-adv-x="1163" d="M98 279v172h967v-172h-967zM98 842v192h391v273h185v-273h391v-192h-391v-277h-185v277h-391z" /> +<glyph unicode="²" horiz-adv-x="858" d="M135 1300q109 166 287 166q111 0 189.5 -66.5t78.5 -180.5q0 -63 -33.5 -122t-124.5 -153l-194 -199h379v-135h-572v119l252 256q86 86 122 135t36 99.5t-38 85t-97 34.5q-104 0 -172 -104z" /> +<glyph unicode="³" horiz-adv-x="811" d="M111 662l61 114q100 -72 217 -71q74 0 122 33.5t48 99t-53 104.5t-124 39t-116 -14v108l197 230h-305v127h495v-113l-204 -229q117 -2 181 -73t64 -183.5t-87 -186.5t-226 -74t-270 89z" /> +<glyph unicode="´" horiz-adv-x="1705" d="M692 1286l217 297l242 -100l-250 -197h-209z" /> +<glyph unicode="µ" horiz-adv-x="1314" d="M176 -397v1487h230v-598q0 -301 249 -302q119 0 207 79t88 231v590h230v-1090h-230v199q-55 -100 -152.5 -157.5t-204 -57.5t-187.5 34v-415h-230z" /> +<glyph unicode="¶" horiz-adv-x="1374" d="M72 1139q0 174 120.5 292.5t366.5 118.5h612v-1779h-190v1585h-229v-1585h-185v981q-49 -6 -94 -7q-113 0 -196.5 39t-124.5 101q-80 119 -80 254z" /> +<glyph unicode="·" horiz-adv-x="595" d="M145 653.5q0 63.5 44 107.5t107.5 44t109 -44t45.5 -107.5t-45.5 -108.5t-109 -45t-107.5 45t-44 108.5z" /> +<glyph unicode="¸" horiz-adv-x="575" d="M86 -389l53 117q39 -20 79 -20.5t62.5 23t22.5 56.5t-23.5 58.5t-59.5 25.5t-60 -10l73 139h146l-41 -78q143 -19 143 -162q0 -78 -63.5 -136t-160.5 -58t-171 45z" /> +<glyph unicode="¹" horiz-adv-x="548" d="M84 1307v125h303v-838h-133v713h-170z" /> +<glyph unicode="º" horiz-adv-x="774" d="M115 1200q0 113 77.5 189.5t194.5 76.5t194.5 -76.5t77.5 -189.5t-77.5 -189.5t-194.5 -76.5t-194.5 76.5t-77.5 189.5zM223 1201q0 -75 46 -122t118 -47t118 47t46 122t-46 122t-118 47t-118 -47t-46 -122z" /> +<glyph unicode="»" horiz-adv-x="1120" d="M135 131l236 361l-236 360h221l244 -360l-244 -361h-221zM541 131l235 361l-235 360h221l244 -360l-244 -361h-221z" /> +<glyph unicode="¼" horiz-adv-x="1767" d="M72 1307v125h303v-838h-133v713h-170zM446 -16l764 1566h148l-764 -1566h-148zM1094 211v125l305 502h155l-303 -498h201v154h133v-154h103v-129h-103v-211h-133v211h-358z" /> +<glyph unicode="½" horiz-adv-x="1900" d="M72 1307v125h303v-838h-133v713h-170zM512 -16l764 1566h147l-764 -1566h-147zM1231 690q109 166 285 166q111 0 190.5 -66.5t79.5 -181.5q0 -63 -34 -122.5t-124 -151.5l-196 -199h378v-135h-571v119l254 256q84 86 120 135t36 99t-38 85t-98 35q-100 0 -172 -104z" /> +<glyph unicode="¾" horiz-adv-x="1845" d="M82 662l61 114q100 -72 217 -71q74 0 122 33.5t48 99t-53 104.5t-123.5 39t-115.5 -14v108l196 230h-305v127h496v-113l-205 -229q117 -2 181.5 -73t64.5 -183.5t-87 -186.5t-226.5 -74t-270.5 89zM530 -16l764 1566h148l-764 -1566h-148zM1178 211v125l305 502h155 l-303 -498h201v154h133v-154h103v-129h-103v-211h-133v211h-358z" /> +<glyph unicode="¿" horiz-adv-x="1040" d="M109 362q0 123 67 205q39 49 59.5 69.5t54.5 52.5t57.5 55.5t37.5 41.5q37 43 37 125v93h231v-125q0 -82 -19.5 -122t-84.5 -106l-150 -149q-47 -51 -47 -127t49.5 -126t127 -50t130 48t60.5 128h248q-20 -182 -142.5 -285.5t-304.5 -103.5t-296.5 99t-114.5 277z M377 1305.5q0 62.5 46 107.5t110.5 45t111.5 -44t47 -106.5t-46 -107.5t-110.5 -45t-111.5 44t-47 106.5z" /> +<glyph unicode="À" horiz-adv-x="1495" d="M0 0l631 1432h233l631 -1432h-266l-146 326h-686l-139 -326h-258zM401 1747l242 100l217 -297h-209zM498 549h489l-246 551z" /> +<glyph unicode="Á" horiz-adv-x="1519" d="M0 0l631 1432h258l631 -1432h-258l-144 326h-717l-143 -326h-258zM500 549h520l-260 590zM662 1552l217 297l241 -100l-250 -197h-208z" /> +<glyph unicode="Â" horiz-adv-x="1495" d="M0 0l631 1432h233l631 -1432h-266l-146 326h-686l-139 -326h-258zM383 1550l250 275h213l250 -275h-199l-158 115l-157 -115h-199zM498 549h489l-246 551z" /> +<glyph unicode="Ã" horiz-adv-x="1495" d="M0 0l631 1432h233l631 -1432h-266l-146 326h-686l-139 -326h-258zM406 1550q0 119 48 193t134 74q55 0 153.5 -48.5t128.5 -48.5q61 0 62 90h153q-6 -266 -188 -266q-53 0 -148.5 48t-121.5 48q-68 0 -70 -90h-151zM498 549h489l-246 551z" /> +<glyph unicode="Ä" horiz-adv-x="1495" d="M0 0l631 1432h233l631 -1432h-266l-146 326h-686l-139 -326h-258zM432 1668q0 52 36 89t89 37t90 -36t37 -88t-37 -90t-90 -38t-89 37t-36 89zM498 549h489l-246 551zM811 1668q0 52 37 89t89 37t89 -36t37 -88t-38 -90t-89 -38t-88 37t-37 89z" /> +<glyph unicode="Å" horiz-adv-x="1495" d="M0 0l618 1407q-92 66 -92 162t66.5 160.5t155 64.5t156 -64.5t67.5 -162t-97 -162.5l621 -1405h-266l-146 326h-686l-139 -326h-258zM498 549h489l-246 551zM635 1580q0 -50 31.5 -82t82 -32t81 32t30.5 82t-30.5 82t-81 32t-82 -32t-31.5 -82z" /> +<glyph unicode="Æ" horiz-adv-x="2129" d="M-23 0l750 1432h1268v-226h-764v-393h686v-211h-686v-377h788v-225h-1052v326h-518l-175 -326h-297zM565 557h402v649h-60z" /> +<glyph unicode="Ç" horiz-adv-x="1507" d="M106 735q0 305 218.5 518t551 213t556.5 -245l-154 -168q-102 98 -193.5 137t-214.5 39q-217 0 -364.5 -140.5t-147.5 -358.5t146.5 -364.5t347.5 -146.5q125 0 215 42t188 134l156 -159q-213 -238 -520 -250l-33 -64q143 -18 143 -162q0 -78 -63.5 -136t-160.5 -58 t-171 45l53 117q39 -20 79 -20.5t62.5 23t22.5 56.5t-23.5 58.5t-59 25.5t-60.5 -10l68 129q-281 35 -461.5 237.5t-180.5 507.5z" /> +<glyph unicode="È" horiz-adv-x="1339" d="M199 0v1432h1005v-228h-764v-379h686v-215h-686v-383h789v-227h-1030zM403 1747l242 100l217 -297h-209z" /> +<glyph unicode="É" horiz-adv-x="1339" d="M199 0v1432h1005v-228h-764v-379h686v-215h-686v-383h789v-227h-1030zM602 1550l217 297l242 -100l-250 -197h-209z" /> +<glyph unicode="Ê" horiz-adv-x="1339" d="M199 0v1432h1005v-228h-764v-379h686v-215h-686v-383h789v-227h-1030zM346 1550l250 275h213l250 -275h-199l-158 115l-157 -115h-199z" /> +<glyph unicode="Ë" horiz-adv-x="1339" d="M199 0v1432h1005v-228h-764v-379h686v-215h-686v-383h789v-227h-1030zM389 1668q0 52 37 89t89 37t89 -36t37 -88t-38 -90t-90 -38t-88 37t-36 89zM768 1668q0 52 37 89t89 37t89 -36t37 -88t-37 -90t-89 -38t-89 37t-37 89z" /> +<glyph unicode="Ì" horiz-adv-x="638" d="M-31 1747l242 100l217 -297h-209zM199 0v1432h241v-1432h-241z" /> +<glyph unicode="Í" horiz-adv-x="638" d="M199 0v1432h241v-1432h-241zM211 1550l217 297l242 -100l-250 -197h-209z" /> +<glyph unicode="Î" horiz-adv-x="638" d="M-14 1550l250 275h213l249 -275h-198l-158 115l-158 -115h-198zM199 0v1432h241v-1432h-241z" /> +<glyph unicode="Ï" horiz-adv-x="638" d="M6 1668q0 52 36 89t89 37t90 -36t37 -88t-37 -90t-90 -38t-89 37t-36 89zM199 0v1432h241v-1432h-241zM385 1668q0 52 37 89t89 37t89 -36t37 -88t-38 -90t-89 -38t-88 37t-37 89z" /> +<glyph unicode="Ð" horiz-adv-x="1617" d="M53 602v215h162v615h492q385 0 591.5 -187.5t206.5 -521.5t-200.5 -528.5t-614.5 -194.5h-475v602h-162zM457 227h268q260 0 398.5 124t138.5 366q0 492 -564 491h-241v-391h512v-215h-512v-375z" /> +<glyph unicode="Ñ" horiz-adv-x="1712" d="M199 0v1432h241l832 -1070v1070h241v-1432h-262l-811 1044v-1044h-241zM510 1550q0 119 48 193t134 74q55 0 153.5 -48.5t129.5 -48.5q61 0 61 90h154q-7 -266 -189 -266q-53 0 -148 48t-122 48q-68 0 -69 -90h-152z" /> +<glyph unicode="Ò" horiz-adv-x="1720" d="M106 726q0 316 217.5 528t537 212t536.5 -212t217 -528t-217 -528t-536.5 -212t-537 212t-217.5 528zM354 726q0 -216 146.5 -367.5t359.5 -151.5t359.5 151.5t146.5 367.5t-146.5 367.5t-359.5 151.5t-359.5 -151.5t-146.5 -367.5zM557 1747l242 100l217 -297h-209z" /> +<glyph unicode="Ó" horiz-adv-x="1720" d="M106 726q0 316 217.5 528t537 212t536.5 -212t217 -528t-217 -528t-536.5 -212t-537 212t-217.5 528zM354 726q0 -216 146.5 -367.5t359.5 -151.5t359.5 151.5t146.5 367.5t-146.5 367.5t-359.5 151.5t-359.5 -151.5t-146.5 -367.5zM688 1550l217 297l242 -100l-250 -197 h-209z" /> +<glyph unicode="Ô" horiz-adv-x="1720" d="M106 726q0 316 217.5 528t537 212t536.5 -212t217 -528t-217 -528t-536.5 -212t-537 212t-217.5 528zM354 726q0 -216 146.5 -367.5t359.5 -151.5t359.5 151.5t146.5 367.5t-146.5 367.5t-359.5 151.5t-359.5 -151.5t-146.5 -367.5zM500 1550l250 275h213l249 -275h-198 l-158 115l-158 -115h-198z" /> +<glyph unicode="Õ" horiz-adv-x="1720" d="M106 726q0 316 217.5 528t537 212t536.5 -212t217 -528t-217 -528t-536.5 -212t-537 212t-217.5 528zM354 726q0 -216 146.5 -367.5t359.5 -151.5t359.5 151.5t146.5 367.5t-146.5 367.5t-359.5 151.5t-359.5 -151.5t-146.5 -367.5zM516 1550q0 119 48 193t134 74 q55 0 153.5 -48.5t129.5 -48.5q61 0 61 90h154q-6 -266 -188 -266q-53 0 -148.5 48t-122.5 48q-68 0 -69 -90h-152z" /> +<glyph unicode="Ö" horiz-adv-x="1720" d="M106 726q0 316 217.5 528t537 212t536.5 -212t217 -528t-217 -528t-536.5 -212t-537 212t-217.5 528zM354 726q0 -216 146.5 -367.5t359.5 -151.5t359.5 151.5t146.5 367.5t-146.5 367.5t-359.5 151.5t-359.5 -151.5t-146.5 -367.5zM535 1668q0 52 35.5 89t89 37t90 -36 t36.5 -88t-36.5 -90t-90 -38t-89 37t-35.5 89zM913 1668q0 52 37 89t89.5 37t89 -36t36.5 -88t-37.5 -90t-89 -38t-88.5 37t-37 89z" /> +<glyph unicode="×" horiz-adv-x="1157" d="M98 430l351 350l-349 346l131 131l349 -350l348 350l129 -131l-346 -346l348 -350l-129 -131l-350 350l-351 -350z" /> +<glyph unicode="Ø" horiz-adv-x="1720" d="M106 727q0 315 217.5 527t536.5 212q125 0 248 -39l111 234h204l-145 -313q156 -98 246 -261t90 -360q0 -317 -217 -529t-537 -212q-109 0 -207 24l-116 -250h-205l149 320q-174 94 -274.5 265t-100.5 382zM354 725q0 -133 60.5 -248t165.5 -186l434 930q-74 24 -154 24 q-213 0 -359.5 -151.5t-146.5 -368.5zM750 217q57 -10 110 -10q213 0 359.5 151.5t146.5 366.5q0 250 -188 408z" /> +<glyph unicode="Ù" horiz-adv-x="1572" d="M180 629v803h242v-793q0 -197 98 -311.5t266 -114.5t266.5 114.5t98.5 311.5v793h242v-803q0 -309 -170 -476t-436.5 -167t-436.5 166.5t-170 476.5zM510 1747l242 100l217 -297h-209z" /> +<glyph unicode="Ú" horiz-adv-x="1572" d="M180 629v803h242v-793q0 -197 98 -311.5t266 -114.5t266.5 114.5t98.5 311.5v793h242v-803q0 -309 -170 -476t-436.5 -167t-436.5 166.5t-170 476.5zM643 1552l217 297l242 -100l-250 -197h-209z" /> +<glyph unicode="Û" horiz-adv-x="1572" d="M180 629v803h242v-793q0 -197 98 -311.5t266 -114.5t266.5 114.5t98.5 311.5v793h242v-803q0 -309 -170 -476t-436.5 -167t-436.5 166.5t-170 476.5zM438 1550l250 275h213l250 -275h-199l-157 115l-158 -115h-199z" /> +<glyph unicode="Ü" horiz-adv-x="1572" d="M180 629v803h242v-793q0 -197 98 -311.5t266 -114.5t266.5 114.5t98.5 311.5v793h242v-803q0 -309 -170 -476t-436.5 -167t-436.5 166.5t-170 476.5zM475 1668q0 52 37 89t89 37t89 -36t37 -88t-38 -90t-90 -38t-88 37t-36 89zM854 1668q0 52 37 89t89 37t89 -36t37 -88 t-37 -90t-89 -38t-89 37t-37 89z" /> +<glyph unicode="Ý" horiz-adv-x="1277" d="M-16 1432h264l391 -652l391 652h264l-532 -867v-565h-246v565zM588 1520l217 297l242 -101l-250 -196h-209z" /> +<glyph unicode="Þ" horiz-adv-x="1404" d="M199 0v1432h241v-181h230q645 1 645 -495q0 -272 -162 -394t-479 -122h-234v-240h-241zM440 459h260q203 0 285 78.5t82 224t-100.5 208t-300.5 62.5h-226v-573z" /> +<glyph unicode="ß" horiz-adv-x="1333" d="M166 0v934q0 147 13.5 207.5t30.5 114t41.5 91t63.5 78.5t86 66q111 59 258.5 59t248 -41t149.5 -108q92 -123 92 -266q0 -211 -213 -344q152 -16 227.5 -123t75.5 -246q0 -193 -135 -307.5t-387 -114.5h-84v201h45q154 0 236.5 50t82.5 172t-81.5 180.5t-219.5 58.5 q-47 0 -71 -3v191q147 22 218.5 93t71.5 164t-54 160.5t-171 67.5q-156 0 -219 -96t-63 -285v-954h-242z" /> +<glyph unicode="à" horiz-adv-x="1202" d="M84 337q0 161 119 240.5t321 79.5h297v41q0 217 -241 217q-152 0 -316 -110l-102 143q199 158 450 158q193 0 315 -97.5t122 -306.5v-702h-209v145q-135 -162 -363 -161q-170 0 -281.5 96t-111.5 257zM313 342q0 -80 61.5 -122t171 -42t191.5 62t82 166v92h-258 q-248 0 -248 -156zM328 1425l241 101l217 -297h-208z" /> +<glyph unicode="á" horiz-adv-x="1202" d="M84 337q0 161 119 240.5t321 79.5h297v41q0 217 -241 217q-152 0 -316 -110l-102 143q199 158 450 158q193 0 315 -97.5t122 -306.5v-702h-209v145q-135 -162 -363 -161q-170 0 -281.5 96t-111.5 257zM313 342q0 -80 61.5 -122t171 -42t191.5 62t82 166v92h-258 q-248 0 -248 -156zM510 1229l217 297l242 -101l-250 -196h-209z" /> +<glyph unicode="â" horiz-adv-x="1202" d="M84 337q0 161 119 240.5t321 79.5h297v41q0 217 -241 217q-152 0 -316 -110l-102 143q199 158 450 158q193 0 315 -97.5t122 -306.5v-702h-209v145q-135 -162 -363 -161q-170 0 -281.5 96t-111.5 257zM240 1229l249 274h213l250 -274h-198l-158 114l-158 -114h-198z M313 342q0 -80 61.5 -122t171 -42t191.5 62t82 166v92h-258q-248 0 -248 -156z" /> +<glyph unicode="ã" horiz-adv-x="1202" d="M84 337q0 161 119 240.5t321 79.5h297v41q0 217 -241 217q-152 0 -316 -110l-102 143q199 158 450 158q193 0 315 -97.5t122 -306.5v-702h-209v145q-135 -162 -363 -161q-170 0 -281.5 96t-111.5 257zM256 1229q0 119 48 192.5t134 73.5q55 0 153.5 -48t129.5 -48 q61 0 61 90h154q-6 -266 -188 -266q-53 0 -148.5 48t-122.5 48q-68 0 -69 -90h-152zM313 342q0 -80 61.5 -122t171 -42t191.5 62t82 166v92h-258q-248 0 -248 -156z" /> +<glyph unicode="ä" horiz-adv-x="1202" d="M84 337q0 161 119 240.5t321 79.5h297v41q0 217 -241 217q-152 0 -316 -110l-102 143q199 158 450 158q193 0 315 -97.5t122 -306.5v-702h-209v145q-135 -162 -363 -161q-170 0 -281.5 96t-111.5 257zM285 1356q0 53 35.5 89t89 36t90.5 -36t37 -89t-37 -90t-90.5 -37 t-89 37t-35.5 90zM313 342q0 -80 61.5 -122t171 -42t191.5 62t82 166v92h-258q-248 0 -248 -156zM664 1355q0 52 36.5 89t89 37t89 -36t36.5 -89t-37.5 -90t-89 -37t-88 37t-36.5 89z" /> +<glyph unicode="å" horiz-adv-x="1202" d="M84 337q0 161 119 240.5t321 79.5h297v41q0 217 -241 217q-152 0 -316 -110l-102 143q199 158 450 158q193 0 315 -97.5t122 -306.5v-702h-209v145q-135 -162 -363 -161q-170 0 -281.5 96t-111.5 257zM313 342q0 -80 61.5 -122t171 -42t191.5 62t82 166v92h-258 q-248 0 -248 -156zM381 1407q0 86 66.5 150.5t154.5 64.5t155.5 -64.5t67.5 -150.5t-67.5 -149.5t-155.5 -63.5t-154.5 63.5t-66.5 149.5zM489 1408q0 -50 32 -82t82 -32t81 32t31 82t-31 82t-81 32t-82 -32t-32 -82z" /> +<glyph unicode="æ" horiz-adv-x="1949" d="M84 338q0 160 117.5 235.5t322.5 75.5h297v49q0 217 -241 217q-152 0 -316 -110l-102 143q199 158 450.5 158t362.5 -152q147 152 371.5 152t371 -134t146.5 -370v-131h-813q2 -131 95 -211t222 -80q184 0 291 129l131 -143q-176 -182 -441.5 -182t-414.5 196 q-164 -197 -436 -196q-172 0 -293 97t-121 257zM313 342q0 -80 61.5 -122t171 -42t191.5 62t82 166v65h-258q-190 0 -229 -57q-18 -29 -19 -72zM1053 649l581 -2q-8 129 -83.5 195.5t-192.5 66.5t-206 -69.5t-99 -190.5z" /> +<glyph unicode="ç" horiz-adv-x="1181" d="M96 553q0 240 171 396.5t417 156.5t416 -170l-135 -166q-141 123 -284.5 123t-249 -95.5t-105.5 -246t103 -254.5t257 -104t289 139l135 -148q-168 -168 -381 -194l-35 -68q144 -19 144 -162q0 -78 -63.5 -136t-161 -58t-171.5 45l54 117q39 -20 78.5 -20.5t62 23 t22.5 56.5t-23.5 58.5t-59 25.5t-60.5 -10l68 127q-207 25 -347.5 175t-140.5 390z" /> +<glyph unicode="è" horiz-adv-x="1265" d="M96 546q0 257 164 408.5t386 151.5t378 -134t156 -370v-158h-854q8 -119 108.5 -191.5t229.5 -72.5q205 0 311 129l131 -143q-176 -182 -459 -182q-229 0 -390 152.5t-161 409.5zM326 625h624q0 137 -86 210.5t-212 73.5t-226 -76.5t-100 -207.5zM385 1425l242 101 l217 -297h-209z" /> +<glyph unicode="é" horiz-adv-x="1265" d="M96 546q0 257 164 408.5t386 151.5t378 -134t156 -370v-158h-854q8 -119 108.5 -191.5t229.5 -72.5q205 0 311 129l131 -143q-176 -182 -459 -182q-229 0 -390 152.5t-161 409.5zM326 625h624q0 137 -86 210.5t-212 73.5t-226 -76.5t-100 -207.5zM561 1233l217 297 l242 -100l-250 -197h-209z" /> +<glyph unicode="ê" horiz-adv-x="1265" d="M96 546q0 257 164 408.5t386 151.5t378 -134t156 -370v-158h-854q8 -119 108.5 -191.5t229.5 -72.5q205 0 311 129l131 -143q-176 -182 -459 -182q-229 0 -390 152.5t-161 409.5zM293 1229l250 274h213l250 -274h-199l-158 114l-157 -114h-199zM326 625h624 q0 137 -86 210.5t-212 73.5t-226 -76.5t-100 -207.5z" /> +<glyph unicode="ë" horiz-adv-x="1265" d="M96 546q0 257 164 408.5t386 151.5t378 -134t156 -370v-158h-854q8 -119 108.5 -191.5t229.5 -72.5q205 0 311 129l131 -143q-176 -182 -459 -182q-229 0 -390 152.5t-161 409.5zM326 625h624q0 137 -86 210.5t-212 73.5t-226 -76.5t-100 -207.5zM332 1356q0 53 37 89 t89 36t89 -36t37 -89t-38 -90t-90.5 -37t-88 37t-35.5 90zM711 1355q0 52 36.5 89t89 37t89.5 -36t37 -89t-37 -90t-89.5 -37t-89 37t-36.5 89z" /> +<glyph unicode="ì" d="M-49 1425l242 101l217 -297h-209zM166 0v1090h229v-1090h-229z" /> +<glyph unicode="í" d="M166 0v1090h229v-1090h-229zM197 1229l217 287l225 -101l-250 -186h-192z" /> +<glyph unicode="î" d="M-66 1229l250 274h213l250 -274h-198l-158 114l-158 -114h-199zM166 0v1090h229v-1090h-229z" /> +<glyph unicode="ï" d="M-16 1356q0 53 36.5 89t89 36t89.5 -36t37 -89t-38 -90t-90.5 -37t-88 37t-35.5 90zM166 0v1090h229v-1090h-229zM362 1355q0 52 37 89t89.5 37t89 -36t36.5 -89t-36.5 -90t-89 -37t-89.5 37t-37 89z" /> +<glyph unicode="ð" horiz-adv-x="1220" d="M102 474q0 216 143.5 354.5t346.5 138.5q145 0 221 -76l4 4q-78 129 -252 303l-190 -121l-117 111l193 123q-4 6 -150 127l195 112q74 -57 149 -129l174 111l121 -111l-180 -116q360 -391 360 -758q0 -252 -133 -407.5t-362.5 -155.5t-376 137t-146.5 353zM326 474 q0 -120 78.5 -205t206.5 -85t207 85t79 205t-79 206t-207 86t-206.5 -86t-78.5 -206z" /> +<glyph unicode="ñ" horiz-adv-x="1323" d="M166 0v1090h229v-199q55 100 152.5 157.5t210.5 57.5q184 0 297.5 -112.5t113.5 -325.5v-668h-229v598q0 301 -250 301q-119 0 -207 -78.5t-88 -230.5v-590h-229zM338 1229q0 119 48 192.5t134 73.5q55 0 153.5 -48t129.5 -48q61 0 61 90h154q-7 -266 -189 -266 q-53 0 -148 48t-122 48q-68 0 -70 -90h-151z" /> +<glyph unicode="ò" horiz-adv-x="1335" d="M94 544.5q0 235.5 164 398.5t409.5 163t409.5 -163t164 -398.5t-164 -398t-409.5 -162.5t-409.5 162.5t-164 398zM324 544.5q0 -157.5 97 -257t246.5 -99.5t247 99.5t97.5 257t-97.5 257t-247 99.5t-246.5 -99.5t-97 -257zM350 1425l242 101l217 -297h-209z" /> +<glyph unicode="ó" horiz-adv-x="1335" d="M94 544.5q0 235.5 164 398.5t409.5 163t409.5 -163t164 -398.5t-164 -398t-409.5 -162.5t-409.5 162.5t-164 398zM324 544.5q0 -157.5 97 -257t246.5 -99.5t247 99.5t97.5 257t-97.5 257t-247 99.5t-246.5 -99.5t-97 -257zM563 1229l217 297l242 -101l-250 -196h-209z " /> +<glyph unicode="ô" horiz-adv-x="1335" d="M94 544.5q0 235.5 164 398.5t409.5 163t409.5 -163t164 -398.5t-164 -398t-409.5 -162.5t-409.5 162.5t-164 398zM313 1229l250 274h213l250 -274h-199l-157 114l-158 -114h-199zM324 544.5q0 -157.5 97 -257t246.5 -99.5t247 99.5t97.5 257t-97.5 257t-247 99.5 t-246.5 -99.5t-97 -257z" /> +<glyph unicode="õ" horiz-adv-x="1335" d="M94 544.5q0 235.5 164 398.5t409.5 163t409.5 -163t164 -398.5t-164 -398t-409.5 -162.5t-409.5 162.5t-164 398zM324 544.5q0 -157.5 97 -257t246.5 -99.5t247 99.5t97.5 257t-97.5 257t-247 99.5t-246.5 -99.5t-97 -257zM328 1229q0 119 48 192.5t134 73.5 q55 0 153.5 -48t129.5 -48q61 0 61 90h154q-7 -266 -189 -266q-53 0 -148.5 48t-121.5 48q-68 0 -70 -90h-151z" /> +<glyph unicode="ö" horiz-adv-x="1335" d="M94 544.5q0 235.5 164 398.5t409.5 163t409.5 -163t164 -398.5t-164 -398t-409.5 -162.5t-409.5 162.5t-164 398zM324 544.5q0 -157.5 97 -257t246.5 -99.5t247 99.5t97.5 257t-97.5 257t-247 99.5t-246.5 -99.5t-97 -257zM344 1356q0 53 37 89t89 36t89 -36t37 -89 t-38 -90t-90 -37t-88 37t-36 90zM723 1355q0 52 37 89t89 37t89 -36t37 -89t-37 -90t-89 -37t-89 37t-37 89z" /> +<glyph unicode="÷" horiz-adv-x="1163" d="M98 696v193h967v-193h-967zM430 432.5q0 63.5 44 107.5t107.5 44t108.5 -44t45 -107.5t-45 -108.5t-108.5 -45t-107.5 45t-44 108.5zM430 1159.5q0 63.5 44 107.5t107.5 44t108.5 -44t45 -107.5t-45 -108.5t-108.5 -45t-107.5 45t-44 108.5z" /> +<glyph unicode="ø" horiz-adv-x="1335" d="M94 545q0 236 164 398.5t410 162.5q90 0 170 -25l90 193h205l-127 -270q111 -78 173 -198t62 -261q0 -236 -163.5 -398.5t-409.5 -162.5q-57 0 -133 14l-99 -213h-205l131 281q-125 74 -196.5 200.5t-71.5 278.5zM324 531q0 -171 129 -273l297 635q-35 8 -82 8 q-150 0 -247 -99.5t-97 -270.5zM625 190q14 -2 43 -2q150 0 247 99.5t97 259.5t-101 256z" /> +<glyph unicode="ù" horiz-adv-x="1323" d="M154 422v668h229v-598q0 -301 250 -302q119 0 207 79t88 231v590h229v-1090h-229v199q-55 -100 -152.5 -157.5t-210.5 -57.5q-184 0 -297.5 112.5t-113.5 325.5zM346 1425l242 101l217 -297h-209z" /> +<glyph unicode="ú" horiz-adv-x="1323" d="M154 422v668h229v-598q0 -301 250 -302q119 0 207 79t88 231v590h229v-1090h-229v199q-55 -100 -152.5 -157.5t-210.5 -57.5q-184 0 -297.5 112.5t-113.5 325.5zM508 1233l217 297l242 -100l-250 -197h-209z" /> +<glyph unicode="û" horiz-adv-x="1323" d="M154 422v668h229v-598q0 -301 250 -302q119 0 207 79t88 231v590h229v-1090h-229v199q-55 -100 -152.5 -157.5t-210.5 -57.5q-184 0 -297.5 112.5t-113.5 325.5zM303 1229l250 274h213l250 -274h-199l-158 114l-157 -114h-199z" /> +<glyph unicode="ü" horiz-adv-x="1323" d="M154 422v668h229v-598q0 -301 250 -302q119 0 207 79t88 231v590h229v-1090h-229v199q-55 -100 -152.5 -157.5t-210.5 -57.5q-184 0 -297.5 112.5t-113.5 325.5zM332 1356q0 53 37 89t89 36t89 -36t37 -89t-38 -90t-90.5 -37t-88 37t-35.5 90zM711 1355q0 52 36.5 89 t89 37t89.5 -36t37 -89t-37 -90t-89.5 -37t-89 37t-36.5 89z" /> +<glyph unicode="ý" horiz-adv-x="1175" d="M18 1090h246l326 -803l325 803h246l-528 -1295q-47 -106 -135.5 -167.5t-194.5 -61.5q-150 0 -270 108l104 187q72 -68 148.5 -68t125 55.5t48.5 120.5q0 29 -441 1121zM471 1286l217 297l242 -100l-250 -197h-209z" /> +<glyph unicode="þ" horiz-adv-x="1376" d="M166 -397v1917h229v-580q6 6 15.5 17.5t44 40t73.5 51.5q102 57 220 57q237 0 384.5 -160t147.5 -404.5t-146.5 -401t-390.5 -156.5q-168 0 -292 106q-29 25 -41 41l-15 19v-547h-229zM391 544.5q0 -147.5 88 -253t226.5 -105.5t233.5 107.5t95 252t-94 252t-233.5 107.5 t-227.5 -106.5t-88 -254z" /> +<glyph unicode="ÿ" horiz-adv-x="1175" d="M18 1090h246l326 -803l325 803h246l-528 -1295q-47 -106 -135.5 -167.5t-194.5 -61.5q-150 0 -270 108l104 187q72 -68 148.5 -68t125 55.5t48.5 120.5q0 29 -441 1121zM283 1356q0 53 36.5 89t89 36t89.5 -36t37 -89t-38 -90t-90.5 -37t-88 37t-35.5 90zM662 1355 q0 52 36.5 89t89 37t89 -36t36.5 -89t-36.5 -90t-89 -37t-89 37t-36.5 89z" /> +<glyph unicode="Œ" horiz-adv-x="2183" d="M109 716q0 306 209.5 511t519.5 205h1210v-228h-764v-379h686v-215h-686v-383h789v-227h-1235q-309 0 -519 205t-210 511zM371 717q0 -209 142 -357.5t347 -148.5h182v1010h-182q-207 0 -348 -147.5t-141 -356.5z" /> +<glyph unicode="œ" horiz-adv-x="2183" d="M94 544.5q0 235.5 164 398.5t410 163q287 0 454 -215q76 104 194 159.5t245 55.5q225 0 380.5 -134t155.5 -370v-158h-854q8 -119 108.5 -191.5t229.5 -72.5q205 0 311 129l131 -143q-176 -182 -458 -182q-133 0 -250 55t-193 158q-166 -213 -454 -213q-246 0 -410 162.5 t-164 398zM324 544.5q0 -157.5 97 -257t246.5 -99.5t247 99.5t97.5 257t-97.5 257t-247 99.5t-246.5 -99.5t-97 -257zM1243 625h625q0 137 -86 210.5t-212 73.5t-226.5 -76.5t-100.5 -207.5z" /> +<glyph unicode="ˆ" horiz-adv-x="1380" d="M340 1229l250 274h213l250 -274h-199l-158 114l-157 -114h-199z" /> +<glyph unicode="˜" horiz-adv-x="1062" d="M195 1520q0 119 48 192.5t134 73.5q55 0 153.5 -48t128.5 -48q61 0 62 90h153q-6 -267 -188 -267q-53 0 -148.5 48.5t-121.5 48.5q-68 0 -70 -90h-151z" /> +<glyph unicode=" " horiz-adv-x="924" /> +<glyph unicode=" " horiz-adv-x="1849" /> +<glyph unicode=" " horiz-adv-x="924" /> +<glyph unicode=" " horiz-adv-x="1849" /> +<glyph unicode=" " horiz-adv-x="616" /> +<glyph unicode=" " horiz-adv-x="462" /> +<glyph unicode=" " horiz-adv-x="308" /> +<glyph unicode=" " horiz-adv-x="308" /> +<glyph unicode=" " horiz-adv-x="231" /> +<glyph unicode=" " horiz-adv-x="369" /> +<glyph unicode=" " horiz-adv-x="102" /> +<glyph unicode="‐" horiz-adv-x="974" d="M147 504v215h680v-215h-680z" /> +<glyph unicode="‑" horiz-adv-x="974" d="M147 504v215h680v-215h-680z" /> +<glyph unicode="‒" horiz-adv-x="974" d="M147 504v215h680v-215h-680z" /> +<glyph unicode="–" horiz-adv-x="1101" d="M168 463v137h766v-137h-766z" /> +<glyph unicode="—" horiz-adv-x="1484" d="M168 465v135h1149v-135h-1149z" /> +<glyph unicode="‘" horiz-adv-x="442" d="M72 1160.5q0 56.5 37 109.5l120 174h125l-80 -176q57 -37 57.5 -99.5t-36.5 -98.5t-92.5 -36t-93 35t-37.5 91.5z" /> +<glyph unicode="’" horiz-adv-x="444" d="M72 1024l78 176q-55 33 -55.5 97.5t36.5 100.5t92.5 36t93 -35t37.5 -91.5t-37 -109.5l-120 -174h-125z" /> +<glyph unicode="‚" horiz-adv-x="444" d="M72 -166l78 176q-55 35 -55.5 98.5t36.5 99.5t92.5 36t93 -35t37.5 -91.5t-37 -109.5l-120 -174h-125z" /> +<glyph unicode="“" horiz-adv-x="757" d="M72 1160.5q0 56.5 37 109.5l120 174h125l-80 -176q57 -37 57.5 -99.5t-36.5 -98.5t-92.5 -36t-93 35t-37.5 91.5zM385 1160.5q0 56.5 37 109.5l121 174h125l-80 -176q57 -37 57 -99.5t-37 -98.5t-92 -36t-93 35t-38 91.5z" /> +<glyph unicode="”" horiz-adv-x="755" d="M72 1024l78 176q-55 33 -55.5 97.5t36.5 100.5t92.5 36t93 -35t37.5 -91.5t-37 -109.5l-120 -174h-125zM383 1024l78 176q-55 33 -55 97.5t36.5 100.5t92 36t93.5 -35t38 -91.5t-37 -109.5l-121 -174h-125z" /> +<glyph unicode="„" horiz-adv-x="755" d="M72 -166l78 176q-55 35 -55.5 98.5t36.5 99.5t92.5 36t93 -35t37.5 -91.5t-37 -109.5l-120 -174h-125zM383 -166l78 176q-55 35 -55 98.5t36.5 99.5t92 36t93.5 -35t38 -91.5t-37 -109.5l-121 -174h-125z" /> +<glyph unicode="•" horiz-adv-x="876" d="M174 647.5q0 108.5 78 186t186.5 77.5t186 -77.5t77.5 -186t-77.5 -186.5t-186 -78t-186.5 78t-78 186.5z" /> +<glyph unicode=" " horiz-adv-x="369" /> +<glyph unicode="‹" horiz-adv-x="714" d="M115 492l243 360h222l-236 -360l236 -361h-222z" /> +<glyph unicode="›" horiz-adv-x="714" d="M135 131l236 361l-236 360h221l244 -360l-244 -361h-221z" /> +<glyph unicode=" " horiz-adv-x="462" /> +<glyph unicode="€" horiz-adv-x="1558" d="M106 459v176h185q-6 49 -6 98t2 72h-181v176h213q68 219 240 352t391 133q326 0 516 -235l-145 -184q-90 96 -171 135t-200 39t-214 -62.5t-142 -177.5h487v-176h-530q-2 -25 -2 -75t6 -95h526v-176h-471q111 -213 334 -213q111 0 189.5 42t166.5 132l146 -176 q-190 -236 -502 -236q-213 0 -378 122t-236 329h-224z" /> +<glyph unicode="◼" horiz-adv-x="1085" d="M0 0v1085h1085v-1085h-1085z" /> +<hkern u1="&" u2="’" k="59" /> +<hkern u1="&" u2="Æ" k="-27" /> +<hkern u1="&" u2="Y" k="51" /> +<hkern u1="&" u2="W" k="35" /> +<hkern u1="&" u2="V" k="45" /> +<hkern u1="&" u2="T" k="45" /> +<hkern u1="&" u2="A" k="-12" /> +<hkern u1="&" u2="'" k="59" /> +<hkern u1="'" u2="‹" k="29" /> +<hkern u1="'" u2="ð" k="33" /> +<hkern u1="'" u2="Æ" k="106" /> +<hkern u1="'" u2="o" k="23" /> +<hkern u1="'" u2="J" k="35" /> +<hkern u1="'" u2="A" k="94" /> +<hkern u1="'" u2=":" k="18" /> +<hkern u1="'" u2="4" k="45" /> +<hkern u1="'" u2="/" k="150" /> +<hkern u1="'" u2="." k="258" /> +<hkern u1="'" u2="&" k="39" /> +<hkern u1="(" u2="ð" k="41" /> +<hkern u1="(" u2="{" k="20" /> +<hkern u1="(" u2="w" k="31" /> +<hkern u1="(" u2="v" k="27" /> +<hkern u1="(" u2="u" k="43" /> +<hkern u1="(" u2="t" k="27" /> +<hkern u1="(" u2="s" k="35" /> +<hkern u1="(" u2="o" k="55" /> +<hkern u1="(" u2="n" k="31" /> +<hkern u1="(" u2="j" k="-188" /> +<hkern u1="(" u2="f" k="25" /> +<hkern u1="(" u2="a" k="39" /> +<hkern u1="(" u2="S" k="23" /> +<hkern u1="(" u2="O" k="45" /> +<hkern u1="(" u2="9" k="20" /> +<hkern u1="(" u2="8" k="33" /> +<hkern u1="(" u2="6" k="41" /> +<hkern u1="(" u2="4" k="45" /> +<hkern u1="(" u2="0" k="39" /> +<hkern u1="(" u2="(" k="20" /> +<hkern u1=")" u2=")" k="20" /> +<hkern u1="*" u2="ð" k="35" /> +<hkern u1="*" u2="ï" k="-31" /> +<hkern u1="*" u2="î" k="-66" /> +<hkern u1="*" u2="ì" k="-16" /> +<hkern u1="*" u2="Æ" k="102" /> +<hkern u1="*" u2="y" k="-14" /> +<hkern u1="*" u2="v" k="-18" /> +<hkern u1="*" u2="o" k="23" /> +<hkern u1="*" u2="J" k="41" /> +<hkern u1="*" u2="A" k="90" /> +<hkern u1="+" u2="3" k="20" /> +<hkern u1="-" u2="Æ" k="18" /> +<hkern u1="-" u2="z" k="35" /> +<hkern u1="-" u2="x" k="47" /> +<hkern u1="-" u2="t" k="18" /> +<hkern u1="-" u2="f" k="18" /> +<hkern u1="-" u2="Z" k="39" /> +<hkern u1="-" u2="Y" k="92" /> +<hkern u1="-" u2="X" k="57" /> +<hkern u1="-" u2="W" k="39" /> +<hkern u1="-" u2="V" k="53" /> +<hkern u1="-" u2="T" k="117" /> +<hkern u1="-" u2="S" k="16" /> +<hkern u1="-" u2="J" k="59" /> +<hkern u1="-" u2="A" k="25" /> +<hkern u1="-" u2="7" k="39" /> +<hkern u1="-" u2="3" k="39" /> +<hkern u1="-" u2="2" k="39" /> +<hkern u1="-" u2="1" k="55" /> +<hkern u1="." u2="’" k="289" /> +<hkern u1="." u2="‘" k="289" /> +<hkern u1="." u2="y" k="74" /> +<hkern u1="." u2="w" k="57" /> +<hkern u1="." u2="v" k="74" /> +<hkern u1="." u2="t" k="33" /> +<hkern u1="." u2="f" k="16" /> +<hkern u1="." u2="Y" k="127" /> +<hkern u1="." u2="W" k="96" /> +<hkern u1="." u2="V" k="119" /> +<hkern u1="." u2="U" k="31" /> +<hkern u1="." u2="T" k="119" /> +<hkern u1="." u2="O" k="39" /> +<hkern u1="." u2="7" k="35" /> +<hkern u1="." u2="6" k="20" /> +<hkern u1="." u2="1" k="63" /> +<hkern u1="." u2="0" k="23" /> +<hkern u1="." u2="'" k="258" /> +<hkern u1="/" u2="ð" k="49" /> +<hkern u1="/" u2="Ï" k="-16" /> +<hkern u1="/" u2="Æ" k="135" /> +<hkern u1="/" u2="z" k="53" /> +<hkern u1="/" u2="x" k="35" /> +<hkern u1="/" u2="w" k="23" /> +<hkern u1="/" u2="v" k="20" /> +<hkern u1="/" u2="u" k="53" /> +<hkern u1="/" u2="s" k="88" /> +<hkern u1="/" u2="o" k="94" /> +<hkern u1="/" u2="n" k="57" /> +<hkern u1="/" u2="f" k="27" /> +<hkern u1="/" u2="a" k="84" /> +<hkern u1="/" u2="S" k="33" /> +<hkern u1="/" u2="O" k="51" /> +<hkern u1="/" u2="J" k="31" /> +<hkern u1="/" u2="A" k="125" /> +<hkern u1="/" u2="9" k="20" /> +<hkern u1="/" u2="8" k="39" /> +<hkern u1="/" u2="6" k="45" /> +<hkern u1="/" u2="4" k="86" /> +<hkern u1="/" u2="0" k="43" /> +<hkern u1="/" u2="/" k="575" /> +<hkern u1="0" u2="]" k="43" /> +<hkern u1="0" u2="\" k="27" /> +<hkern u1="0" u2="A" k="20" /> +<hkern u1="0" u2="/" k="49" /> +<hkern u1="0" u2="." k="23" /> +<hkern u1="0" u2=")" k="39" /> +<hkern u1="2" u2="·" k="35" /> +<hkern u1="2" u2="-" k="23" /> +<hkern u1="3" u2="/" k="33" /> +<hkern u1="4" u2="°" k="49" /> +<hkern u1="4" u2="]" k="31" /> +<hkern u1="4" u2="\" k="37" /> +<hkern u1="4" u2="Y" k="31" /> +<hkern u1="4" u2="V" k="27" /> +<hkern u1="4" u2="T" k="41" /> +<hkern u1="4" u2="7" k="27" /> +<hkern u1="4" u2="1" k="25" /> +<hkern u1="4" u2=")" k="31" /> +<hkern u1="4" u2="'" k="43" /> +<hkern u1="5" u2="/" k="29" /> +<hkern u1="6" u2="/" k="27" /> +<hkern u1="7" u2="Æ" k="90" /> +<hkern u1="7" u2="·" k="53" /> +<hkern u1="7" u2="¢" k="41" /> +<hkern u1="7" u2="Y" k="-33" /> +<hkern u1="7" u2="V" k="-12" /> +<hkern u1="7" u2="A" k="82" /> +<hkern u1="7" u2="4" k="41" /> +<hkern u1="7" u2="/" k="123" /> +<hkern u1="7" u2="." k="135" /> +<hkern u1="7" u2="-" k="53" /> +<hkern u1="8" u2="]" k="33" /> +<hkern u1="8" u2="\" k="20" /> +<hkern u1="8" u2="/" k="31" /> +<hkern u1="8" u2=")" k="33" /> +<hkern u1="9" u2="]" k="41" /> +<hkern u1="9" u2="\" k="25" /> +<hkern u1="9" u2="A" k="20" /> +<hkern u1="9" u2="/" k="49" /> +<hkern u1="9" u2="." k="25" /> +<hkern u1="9" u2=")" k="39" /> +<hkern u1=":" u2="’" k="127" /> +<hkern u1=":" u2="y" k="18" /> +<hkern u1=":" u2="v" k="20" /> +<hkern u1=":" u2="t" k="16" /> +<hkern u1=":" u2="Y" k="92" /> +<hkern u1=":" u2="W" k="43" /> +<hkern u1=":" u2="V" k="57" /> +<hkern u1=":" u2="T" k="113" /> +<hkern u1=":" u2="'" k="18" /> +<hkern u1="@" u2="’" k="37" /> +<hkern u1="@" u2="Y" k="53" /> +<hkern u1="@" u2="W" k="20" /> +<hkern u1="@" u2="V" k="33" /> +<hkern u1="@" u2="T" k="51" /> +<hkern u1="A" u2="’" k="109" /> +<hkern u1="A" u2="‘" k="109" /> +<hkern u1="A" u2="ð" k="18" /> +<hkern u1="A" u2="®" k="25" /> +<hkern u1="A" u2="y" k="59" /> +<hkern u1="A" u2="w" k="51" /> +<hkern u1="A" u2="v" k="59" /> +<hkern u1="A" u2="u" k="16" /> +<hkern u1="A" u2="t" k="49" /> +<hkern u1="A" u2="o" k="23" /> +<hkern u1="A" u2="f" k="18" /> +<hkern u1="A" u2="]" k="27" /> +<hkern u1="A" u2="\" k="113" /> +<hkern u1="A" u2="Y" k="104" /> +<hkern u1="A" u2="W" k="68" /> +<hkern u1="A" u2="V" k="82" /> +<hkern u1="A" u2="U" k="35" /> +<hkern u1="A" u2="T" k="113" /> +<hkern u1="A" u2="O" k="37" /> +<hkern u1="A" u2="?" k="43" /> +<hkern u1="A" u2="6" k="20" /> +<hkern u1="A" u2="1" k="43" /> +<hkern u1="A" u2="0" k="20" /> +<hkern u1="A" u2="-" k="25" /> +<hkern u1="A" u2="*" k="90" /> +<hkern u1="A" u2="'" k="94" /> +<hkern u1="B" u2="z" k="10" /> +<hkern u1="B" u2="y" k="16" /> +<hkern u1="B" u2="x" k="27" /> +<hkern u1="B" u2="w" k="14" /> +<hkern u1="B" u2="v" k="16" /> +<hkern u1="B" u2="t" k="18" /> +<hkern u1="B" u2="s" k="14" /> +<hkern u1="B" u2="f" k="16" /> +<hkern u1="B" u2="]" k="41" /> +<hkern u1="B" u2="\" k="29" /> +<hkern u1="B" u2="Y" k="39" /> +<hkern u1="B" u2="X" k="20" /> +<hkern u1="B" u2="W" k="14" /> +<hkern u1="B" u2="V" k="25" /> +<hkern u1="B" u2="T" k="35" /> +<hkern u1="B" u2="J" k="14" /> +<hkern u1="B" u2="A" k="16" /> +<hkern u1="B" u2="/" k="27" /> +<hkern u1="B" u2=")" k="35" /> +<hkern u1="C" u2="ð" k="27" /> +<hkern u1="C" u2="î" k="-47" /> +<hkern u1="C" u2="u" k="14" /> +<hkern u1="C" u2="s" k="14" /> +<hkern u1="C" u2="o" k="31" /> +<hkern u1="C" u2="n" k="10" /> +<hkern u1="C" u2="S" k="10" /> +<hkern u1="C" u2="O" k="31" /> +<hkern u1="C" u2="-" k="20" /> +<hkern u1="E" u2="ð" k="20" /> +<hkern u1="E" u2="u" k="14" /> +<hkern u1="E" u2="t" k="16" /> +<hkern u1="E" u2="o" k="20" /> +<hkern u1="E" u2="f" k="12" /> +<hkern u1="E" u2="O" k="20" /> +<hkern u1="F" u2="ð" k="41" /> +<hkern u1="F" u2="î" k="-43" /> +<hkern u1="F" u2="í" k="20" /> +<hkern u1="F" u2="ì" k="-29" /> +<hkern u1="F" u2="ß" k="16" /> +<hkern u1="F" u2="Æ" k="100" /> +<hkern u1="F" u2="z" k="33" /> +<hkern u1="F" u2="x" k="18" /> +<hkern u1="F" u2="u" k="25" /> +<hkern u1="F" u2="t" k="10" /> +<hkern u1="F" u2="s" k="43" /> +<hkern u1="F" u2="o" k="31" /> +<hkern u1="F" u2="n" k="31" /> +<hkern u1="F" u2="f" k="14" /> +<hkern u1="F" u2="a" k="45" /> +<hkern u1="F" u2="J" k="35" /> +<hkern u1="F" u2="A" k="88" /> +<hkern u1="F" u2="/" k="94" /> +<hkern u1="F" u2="." k="115" /> +<hkern u1="G" u2="y" k="16" /> +<hkern u1="G" u2="x" k="12" /> +<hkern u1="G" u2="w" k="16" /> +<hkern u1="G" u2="v" k="18" /> +<hkern u1="G" u2="t" k="18" /> +<hkern u1="G" u2="f" k="18" /> +<hkern u1="G" u2="]" k="20" /> +<hkern u1="G" u2="Y" k="23" /> +<hkern u1="G" u2="X" k="10" /> +<hkern u1="G" u2="V" k="16" /> +<hkern u1="G" u2="T" k="16" /> +<hkern u1="G" u2="A" k="14" /> +<hkern u1="G" u2=")" k="20" /> +<hkern u1="I" u2="ð" k="18" /> +<hkern u1="I" u2="z" k="10" /> +<hkern u1="I" u2="u" k="10" /> +<hkern u1="I" u2="t" k="16" /> +<hkern u1="I" u2="s" k="12" /> +<hkern u1="I" u2="o" k="18" /> +<hkern u1="I" u2="n" k="10" /> +<hkern u1="I" u2="l" k="10" /> +<hkern u1="I" u2="h" k="10" /> +<hkern u1="I" u2="f" k="14" /> +<hkern u1="I" u2="a" k="12" /> +<hkern u1="J" u2="ð" k="23" /> +<hkern u1="J" u2="Æ" k="18" /> +<hkern u1="J" u2="z" k="16" /> +<hkern u1="J" u2="x" k="12" /> +<hkern u1="J" u2="u" k="12" /> +<hkern u1="J" u2="t" k="14" /> +<hkern u1="J" u2="s" k="20" /> +<hkern u1="J" u2="o" k="16" /> +<hkern u1="J" u2="n" k="10" /> +<hkern u1="J" u2="l" k="10" /> +<hkern u1="J" u2="h" k="10" /> +<hkern u1="J" u2="f" k="14" /> +<hkern u1="J" u2="a" k="14" /> +<hkern u1="J" u2="J" k="16" /> +<hkern u1="J" u2="A" k="18" /> +<hkern u1="J" u2="/" k="43" /> +<hkern u1="J" u2="." k="18" /> +<hkern u1="K" u2="‹" k="27" /> +<hkern u1="K" u2="ð" k="68" /> +<hkern u1="K" u2="ï" k="-39" /> +<hkern u1="K" u2="ì" k="-70" /> +<hkern u1="K" u2="®" k="20" /> +<hkern u1="K" u2="y" k="53" /> +<hkern u1="K" u2="w" k="59" /> +<hkern u1="K" u2="v" k="53" /> +<hkern u1="K" u2="u" k="45" /> +<hkern u1="K" u2="t" k="27" /> +<hkern u1="K" u2="o" k="84" /> +<hkern u1="K" u2="n" k="10" /> +<hkern u1="K" u2="f" k="18" /> +<hkern u1="K" u2="a" k="18" /> +<hkern u1="K" u2="S" k="25" /> +<hkern u1="K" u2="O" k="63" /> +<hkern u1="K" u2="-" k="55" /> +<hkern u1="L" u2="’" k="178" /> +<hkern u1="L" u2="‘" k="178" /> +<hkern u1="L" u2="ð" k="10" /> +<hkern u1="L" u2="·" k="152" /> +<hkern u1="L" u2="®" k="20" /> +<hkern u1="L" u2="y" k="123" /> +<hkern u1="L" u2="w" k="100" /> +<hkern u1="L" u2="v" k="123" /> +<hkern u1="L" u2="u" k="14" /> +<hkern u1="L" u2="t" k="63" /> +<hkern u1="L" u2="o" k="18" /> +<hkern u1="L" u2="f" k="27" /> +<hkern u1="L" u2="\" k="139" /> +<hkern u1="L" u2="Y" k="135" /> +<hkern u1="L" u2="W" k="115" /> +<hkern u1="L" u2="V" k="123" /> +<hkern u1="L" u2="U" k="35" /> +<hkern u1="L" u2="T" k="147" /> +<hkern u1="L" u2="O" k="41" /> +<hkern u1="L" u2="?" k="49" /> +<hkern u1="L" u2="1" k="45" /> +<hkern u1="L" u2="-" k="133" /> +<hkern u1="L" u2="*" k="180" /> +<hkern u1="L" u2="'" k="178" /> +<hkern u1="O" u2="ð" k="10" /> +<hkern u1="O" u2="Æ" k="39" /> +<hkern u1="O" u2="}" k="23" /> +<hkern u1="O" u2="z" k="14" /> +<hkern u1="O" u2="x" k="25" /> +<hkern u1="O" u2="s" k="12" /> +<hkern u1="O" u2="n" k="10" /> +<hkern u1="O" u2="l" k="10" /> +<hkern u1="O" u2="i" k="10" /> +<hkern u1="O" u2="h" k="10" /> +<hkern u1="O" u2="a" k="10" /> +<hkern u1="O" u2="]" k="51" /> +<hkern u1="O" u2="\" k="37" /> +<hkern u1="O" u2="Z" k="25" /> +<hkern u1="O" u2="Y" k="47" /> +<hkern u1="O" u2="X" k="51" /> +<hkern u1="O" u2="W" k="14" /> +<hkern u1="O" u2="V" k="25" /> +<hkern u1="O" u2="T" k="39" /> +<hkern u1="O" u2="J" k="43" /> +<hkern u1="O" u2="A" k="37" /> +<hkern u1="O" u2="/" k="57" /> +<hkern u1="O" u2="." k="39" /> +<hkern u1="O" u2=")" k="45" /> +<hkern u1="P" u2="‹" k="20" /> +<hkern u1="P" u2="ð" k="27" /> +<hkern u1="P" u2="Æ" k="100" /> +<hkern u1="P" u2="s" k="12" /> +<hkern u1="P" u2="o" k="12" /> +<hkern u1="P" u2="a" k="20" /> +<hkern u1="P" u2="]" k="39" /> +<hkern u1="P" u2="Z" k="14" /> +<hkern u1="P" u2="Y" k="16" /> +<hkern u1="P" u2="X" k="39" /> +<hkern u1="P" u2="J" k="63" /> +<hkern u1="P" u2="A" k="78" /> +<hkern u1="P" u2="/" k="98" /> +<hkern u1="P" u2="." k="129" /> +<hkern u1="P" u2=")" k="37" /> +<hkern u1="Q" u2="}" k="10" /> +<hkern u1="Q" u2="j" k="-125" /> +<hkern u1="Q" u2="]" k="25" /> +<hkern u1="R" u2="‹" k="31" /> +<hkern u1="R" u2="ð" k="41" /> +<hkern u1="R" u2="u" k="18" /> +<hkern u1="R" u2="t" k="12" /> +<hkern u1="R" u2="o" k="31" /> +<hkern u1="R" u2="n" k="10" /> +<hkern u1="R" u2="f" k="10" /> +<hkern u1="R" u2="a" k="20" /> +<hkern u1="R" u2="\" k="25" /> +<hkern u1="R" u2="Y" k="27" /> +<hkern u1="R" u2="V" k="18" /> +<hkern u1="R" u2="T" k="20" /> +<hkern u1="R" u2="J" k="10" /> +<hkern u1="S" u2="z" k="12" /> +<hkern u1="S" u2="y" k="20" /> +<hkern u1="S" u2="x" k="18" /> +<hkern u1="S" u2="w" k="20" /> +<hkern u1="S" u2="v" k="20" /> +<hkern u1="S" u2="u" k="12" /> +<hkern u1="S" u2="t" k="25" /> +<hkern u1="S" u2="s" k="12" /> +<hkern u1="S" u2="n" k="12" /> +<hkern u1="S" u2="f" k="23" /> +<hkern u1="S" u2="Y" k="12" /> +<hkern u1="S" u2="V" k="10" /> +<hkern u1="S" u2="A" k="14" /> +<hkern u1="S" u2="/" k="23" /> +<hkern u1="T" u2="›" k="111" /> +<hkern u1="T" u2="‹" k="127" /> +<hkern u1="T" u2="ð" k="82" /> +<hkern u1="T" u2="ï" k="-16" /> +<hkern u1="T" u2="î" k="-66" /> +<hkern u1="T" u2="í" k="41" /> +<hkern u1="T" u2="ì" k="-49" /> +<hkern u1="T" u2="ß" k="27" /> +<hkern u1="T" u2="Æ" k="111" /> +<hkern u1="T" u2="®" k="20" /> +<hkern u1="T" u2="z" k="147" /> +<hkern u1="T" u2="y" k="139" /> +<hkern u1="T" u2="x" k="137" /> +<hkern u1="T" u2="w" k="133" /> +<hkern u1="T" u2="v" k="139" /> +<hkern u1="T" u2="u" k="106" /> +<hkern u1="T" u2="t" k="20" /> +<hkern u1="T" u2="s" k="147" /> +<hkern u1="T" u2="o" k="131" /> +<hkern u1="T" u2="n" k="100" /> +<hkern u1="T" u2="l" k="10" /> +<hkern u1="T" u2="i" k="10" /> +<hkern u1="T" u2="h" k="10" /> +<hkern u1="T" u2="f" k="43" /> +<hkern u1="T" u2="a" k="150" /> +<hkern u1="T" u2="O" k="39" /> +<hkern u1="T" u2="J" k="27" /> +<hkern u1="T" u2="A" k="113" /> +<hkern u1="T" u2="@" k="55" /> +<hkern u1="T" u2=":" k="113" /> +<hkern u1="T" u2="4" k="66" /> +<hkern u1="T" u2="/" k="113" /> +<hkern u1="T" u2="." k="119" /> +<hkern u1="T" u2="-" k="117" /> +<hkern u1="T" u2="&" k="29" /> +<hkern u1="U" u2="ð" k="27" /> +<hkern u1="U" u2="Æ" k="39" /> +<hkern u1="U" u2="z" k="20" /> +<hkern u1="U" u2="x" k="12" /> +<hkern u1="U" u2="u" k="18" /> +<hkern u1="U" u2="t" k="14" /> +<hkern u1="U" u2="s" k="27" /> +<hkern u1="U" u2="o" k="18" /> +<hkern u1="U" u2="n" k="10" /> +<hkern u1="U" u2="l" k="12" /> +<hkern u1="U" u2="i" k="12" /> +<hkern u1="U" u2="h" k="12" /> +<hkern u1="U" u2="f" k="12" /> +<hkern u1="U" u2="a" k="20" /> +<hkern u1="U" u2="J" k="29" /> +<hkern u1="U" u2="A" k="35" /> +<hkern u1="U" u2="/" k="53" /> +<hkern u1="U" u2="." k="33" /> +<hkern u1="V" u2="›" k="35" /> +<hkern u1="V" u2="‹" k="72" /> +<hkern u1="V" u2="ð" k="78" /> +<hkern u1="V" u2="ï" k="-55" /> +<hkern u1="V" u2="î" k="-55" /> +<hkern u1="V" u2="í" k="29" /> +<hkern u1="V" u2="ì" k="-104" /> +<hkern u1="V" u2="ß" k="25" /> +<hkern u1="V" u2="Æ" k="92" /> +<hkern u1="V" u2="z" k="45" /> +<hkern u1="V" u2="x" k="18" /> +<hkern u1="V" u2="u" k="51" /> +<hkern u1="V" u2="t" k="10" /> +<hkern u1="V" u2="s" k="90" /> +<hkern u1="V" u2="o" k="88" /> +<hkern u1="V" u2="n" k="61" /> +<hkern u1="V" u2="f" k="12" /> +<hkern u1="V" u2="a" k="88" /> +<hkern u1="V" u2="S" k="12" /> +<hkern u1="V" u2="O" k="25" /> +<hkern u1="V" u2="J" k="27" /> +<hkern u1="V" u2="A" k="82" /> +<hkern u1="V" u2="@" k="33" /> +<hkern u1="V" u2=":" k="57" /> +<hkern u1="V" u2="4" k="41" /> +<hkern u1="V" u2="1" k="-10" /> +<hkern u1="V" u2="/" k="117" /> +<hkern u1="V" u2="." k="119" /> +<hkern u1="V" u2="-" k="53" /> +<hkern u1="V" u2="&" k="29" /> +<hkern u1="W" u2="›" k="23" /> +<hkern u1="W" u2="‹" k="57" /> +<hkern u1="W" u2="ð" k="72" /> +<hkern u1="W" u2="ï" k="-51" /> +<hkern u1="W" u2="î" k="-49" /> +<hkern u1="W" u2="í" k="25" /> +<hkern u1="W" u2="ì" k="-88" /> +<hkern u1="W" u2="ß" k="23" /> +<hkern u1="W" u2="Æ" k="80" /> +<hkern u1="W" u2="z" k="35" /> +<hkern u1="W" u2="x" k="10" /> +<hkern u1="W" u2="u" k="43" /> +<hkern u1="W" u2="s" k="80" /> +<hkern u1="W" u2="o" k="78" /> +<hkern u1="W" u2="n" k="51" /> +<hkern u1="W" u2="a" k="76" /> +<hkern u1="W" u2="O" k="14" /> +<hkern u1="W" u2="J" k="25" /> +<hkern u1="W" u2="A" k="68" /> +<hkern u1="W" u2="@" k="20" /> +<hkern u1="W" u2=":" k="43" /> +<hkern u1="W" u2="4" k="27" /> +<hkern u1="W" u2="/" k="98" /> +<hkern u1="W" u2="." k="96" /> +<hkern u1="W" u2="-" k="39" /> +<hkern u1="W" u2="&" k="20" /> +<hkern u1="X" u2="‹" k="31" /> +<hkern u1="X" u2="ð" k="51" /> +<hkern u1="X" u2="ï" k="-16" /> +<hkern u1="X" u2="ì" k="-41" /> +<hkern u1="X" u2="®" k="20" /> +<hkern u1="X" u2="y" k="49" /> +<hkern u1="X" u2="w" k="55" /> +<hkern u1="X" u2="v" k="49" /> +<hkern u1="X" u2="u" k="43" /> +<hkern u1="X" u2="t" k="33" /> +<hkern u1="X" u2="o" k="66" /> +<hkern u1="X" u2="n" k="12" /> +<hkern u1="X" u2="f" k="25" /> +<hkern u1="X" u2="a" k="14" /> +<hkern u1="X" u2="O" k="51" /> +<hkern u1="X" u2="-" k="55" /> +<hkern u1="Y" u2="›" k="66" /> +<hkern u1="Y" u2="‹" k="109" /> +<hkern u1="Y" u2="ð" k="90" /> +<hkern u1="Y" u2="ï" k="-78" /> +<hkern u1="Y" u2="î" k="-45" /> +<hkern u1="Y" u2="í" k="39" /> +<hkern u1="Y" u2="ì" k="-125" /> +<hkern u1="Y" u2="ß" k="29" /> +<hkern u1="Y" u2="Æ" k="113" /> +<hkern u1="Y" u2="®" k="31" /> +<hkern u1="Y" u2="z" k="82" /> +<hkern u1="Y" u2="y" k="18" /> +<hkern u1="Y" u2="x" k="43" /> +<hkern u1="Y" u2="w" k="27" /> +<hkern u1="Y" u2="v" k="16" /> +<hkern u1="Y" u2="u" k="74" /> +<hkern u1="Y" u2="t" k="14" /> +<hkern u1="Y" u2="s" k="106" /> +<hkern u1="Y" u2="o" k="123" /> +<hkern u1="Y" u2="n" k="72" /> +<hkern u1="Y" u2="f" k="23" /> +<hkern u1="Y" u2="a" k="100" /> +<hkern u1="Y" u2="S" k="18" /> +<hkern u1="Y" u2="O" k="47" /> +<hkern u1="Y" u2="J" k="20" /> +<hkern u1="Y" u2="A" k="104" /> +<hkern u1="Y" u2="@" k="57" /> +<hkern u1="Y" u2=":" k="90" /> +<hkern u1="Y" u2="6" k="20" /> +<hkern u1="Y" u2="4" k="66" /> +<hkern u1="Y" u2="1" k="-31" /> +<hkern u1="Y" u2="/" k="119" /> +<hkern u1="Y" u2="." k="127" /> +<hkern u1="Y" u2="-" k="92" /> +<hkern u1="Y" u2="&" k="37" /> +<hkern u1="Z" u2="ð" k="25" /> +<hkern u1="Z" u2="î" k="-37" /> +<hkern u1="Z" u2="y" k="16" /> +<hkern u1="Z" u2="w" k="20" /> +<hkern u1="Z" u2="v" k="16" /> +<hkern u1="Z" u2="u" k="23" /> +<hkern u1="Z" u2="t" k="20" /> +<hkern u1="Z" u2="o" k="29" /> +<hkern u1="Z" u2="n" k="14" /> +<hkern u1="Z" u2="f" k="18" /> +<hkern u1="Z" u2="O" k="25" /> +<hkern u1="Z" u2="-" k="35" /> +<hkern u1="[" u2="ð" k="41" /> +<hkern u1="[" u2="ì" k="-33" /> +<hkern u1="[" u2="Æ" k="23" /> +<hkern u1="[" u2="z" k="37" /> +<hkern u1="[" u2="w" k="33" /> +<hkern u1="[" u2="v" k="29" /> +<hkern u1="[" u2="u" k="43" /> +<hkern u1="[" u2="t" k="20" /> +<hkern u1="[" u2="s" k="49" /> +<hkern u1="[" u2="o" k="59" /> +<hkern u1="[" u2="n" k="37" /> +<hkern u1="[" u2="j" k="-184" /> +<hkern u1="[" u2="f" k="20" /> +<hkern u1="[" u2="a" k="45" /> +<hkern u1="[" u2="S" k="27" /> +<hkern u1="[" u2="O" k="51" /> +<hkern u1="[" u2="A" k="27" /> +<hkern u1="[" u2="9" k="20" /> +<hkern u1="[" u2="8" k="33" /> +<hkern u1="[" u2="6" k="43" /> +<hkern u1="[" u2="4" k="55" /> +<hkern u1="[" u2="0" k="43" /> +<hkern u1="\" u2="’" k="127" /> +<hkern u1="\" u2="Æ" k="-39" /> +<hkern u1="\" u2="y" k="47" /> +<hkern u1="\" u2="w" k="37" /> +<hkern u1="\" u2="v" k="47" /> +<hkern u1="\" u2="t" k="23" /> +<hkern u1="\" u2="Y" k="90" /> +<hkern u1="\" u2="W" k="63" /> +<hkern u1="\" u2="V" k="82" /> +<hkern u1="\" u2="U" k="25" /> +<hkern u1="\" u2="T" k="84" /> +<hkern u1="\" u2="O" k="23" /> +<hkern u1="\" u2="A" k="-14" /> +<hkern u1="\" u2="1" k="41" /> +<hkern u1="\" u2="'" k="109" /> +<hkern u1="a" u2="’" k="33" /> +<hkern u1="a" u2="‘" k="33" /> +<hkern u1="a" u2="}" k="23" /> +<hkern u1="a" u2="y" k="12" /> +<hkern u1="a" u2="w" k="10" /> +<hkern u1="a" u2="v" k="12" /> +<hkern u1="a" u2="t" k="12" /> +<hkern u1="a" u2="f" k="8" /> +<hkern u1="a" u2="]" k="47" /> +<hkern u1="a" u2="\" k="70" /> +<hkern u1="a" u2="Z" k="18" /> +<hkern u1="a" u2="Y" k="96" /> +<hkern u1="a" u2="X" k="10" /> +<hkern u1="a" u2="W" k="53" /> +<hkern u1="a" u2="V" k="72" /> +<hkern u1="a" u2="U" k="16" /> +<hkern u1="a" u2="T" k="109" /> +<hkern u1="a" u2="S" k="10" /> +<hkern u1="a" u2="O" k="12" /> +<hkern u1="a" u2="J" k="14" /> +<hkern u1="a" u2="I" k="10" /> +<hkern u1="a" u2=")" k="33" /> +<hkern u1="c" u2="‹" k="27" /> +<hkern u1="c" u2="ð" k="25" /> +<hkern u1="c" u2="s" k="8" /> +<hkern u1="c" u2="o" k="23" /> +<hkern u1="c" u2="a" k="8" /> +<hkern u1="c" u2="]" k="33" /> +<hkern u1="c" u2="\" k="41" /> +<hkern u1="c" u2="Y" k="90" /> +<hkern u1="c" u2="W" k="35" /> +<hkern u1="c" u2="V" k="45" /> +<hkern u1="c" u2="U" k="12" /> +<hkern u1="c" u2="T" k="164" /> +<hkern u1="c" u2="S" k="12" /> +<hkern u1="c" u2="O" k="20" /> +<hkern u1="c" u2="-" k="31" /> +<hkern u1="c" u2=")" k="27" /> +<hkern u1="d" u2="Z" k="12" /> +<hkern u1="d" u2="U" k="12" /> +<hkern u1="d" u2="T" k="10" /> +<hkern u1="d" u2="O" k="10" /> +<hkern u1="d" u2="J" k="16" /> +<hkern u1="d" u2="I" k="10" /> +<hkern u1="e" u2="’" k="37" /> +<hkern u1="e" u2="‘" k="37" /> +<hkern u1="e" u2="}" k="25" /> +<hkern u1="e" u2="y" k="12" /> +<hkern u1="e" u2="x" k="23" /> +<hkern u1="e" u2="v" k="12" /> +<hkern u1="e" u2="t" k="8" /> +<hkern u1="e" u2="f" k="8" /> +<hkern u1="e" u2="]" k="51" /> +<hkern u1="e" u2="\" k="68" /> +<hkern u1="e" u2="Z" k="29" /> +<hkern u1="e" u2="Y" k="117" /> +<hkern u1="e" u2="X" k="35" /> +<hkern u1="e" u2="W" k="74" /> +<hkern u1="e" u2="V" k="88" /> +<hkern u1="e" u2="U" k="14" /> +<hkern u1="e" u2="T" k="158" /> +<hkern u1="e" u2="S" k="14" /> +<hkern u1="e" u2="J" k="18" /> +<hkern u1="e" u2="I" k="12" /> +<hkern u1="e" u2="A" k="14" /> +<hkern u1="e" u2="/" k="35" /> +<hkern u1="e" u2=")" k="47" /> +<hkern u1="f" u2="‹" k="55" /> +<hkern u1="f" u2="ð" k="63" /> +<hkern u1="f" u2="ï" k="-100" /> +<hkern u1="f" u2="î" k="-37" /> +<hkern u1="f" u2="ì" k="-152" /> +<hkern u1="f" u2="Æ" k="90" /> +<hkern u1="f" u2="s" k="8" /> +<hkern u1="f" u2="o" k="27" /> +<hkern u1="f" u2="a" k="10" /> +<hkern u1="f" u2="]" k="-29" /> +<hkern u1="f" u2="Y" k="-117" /> +<hkern u1="f" u2="X" k="-33" /> +<hkern u1="f" u2="W" k="-78" /> +<hkern u1="f" u2="V" k="-94" /> +<hkern u1="f" u2="T" k="-39" /> +<hkern u1="f" u2="J" k="12" /> +<hkern u1="f" u2="A" k="82" /> +<hkern u1="f" u2=":" k="41" /> +<hkern u1="f" u2="/" k="63" /> +<hkern u1="f" u2="." k="66" /> +<hkern u1="f" u2="-" k="63" /> +<hkern u1="i" u2="Z" k="12" /> +<hkern u1="i" u2="U" k="12" /> +<hkern u1="i" u2="T" k="10" /> +<hkern u1="i" u2="O" k="10" /> +<hkern u1="i" u2="J" k="16" /> +<hkern u1="i" u2="I" k="10" /> +<hkern u1="j" u2="j" k="-33" /> +<hkern u1="k" u2="‹" k="41" /> +<hkern u1="k" u2="ð" k="53" /> +<hkern u1="k" u2="s" k="10" /> +<hkern u1="k" u2="o" k="51" /> +<hkern u1="k" u2="a" k="18" /> +<hkern u1="k" u2="Y" k="39" /> +<hkern u1="k" u2="V" k="16" /> +<hkern u1="k" u2="U" k="10" /> +<hkern u1="k" u2="T" k="133" /> +<hkern u1="k" u2="O" k="35" /> +<hkern u1="k" u2="-" k="57" /> +<hkern u1="l" u2="·" k="150" /> +<hkern u1="l" u2="Z" k="12" /> +<hkern u1="l" u2="U" k="12" /> +<hkern u1="l" u2="T" k="10" /> +<hkern u1="l" u2="O" k="10" /> +<hkern u1="l" u2="J" k="16" /> +<hkern u1="l" u2="I" k="10" /> +<hkern u1="n" u2="’" k="35" /> +<hkern u1="n" u2="‘" k="35" /> +<hkern u1="n" u2="}" k="23" /> +<hkern u1="n" u2="y" k="14" /> +<hkern u1="n" u2="w" k="12" /> +<hkern u1="n" u2="v" k="12" /> +<hkern u1="n" u2="t" k="14" /> +<hkern u1="n" u2="f" k="10" /> +<hkern u1="n" u2="]" k="47" /> +<hkern u1="n" u2="\" k="72" /> +<hkern u1="n" u2="Z" k="20" /> +<hkern u1="n" u2="Y" k="96" /> +<hkern u1="n" u2="X" k="10" /> +<hkern u1="n" u2="W" k="53" /> +<hkern u1="n" u2="V" k="72" /> +<hkern u1="n" u2="U" k="16" /> +<hkern u1="n" u2="T" k="109" /> +<hkern u1="n" u2="S" k="10" /> +<hkern u1="n" u2="O" k="12" /> +<hkern u1="n" u2="J" k="14" /> +<hkern u1="n" u2="I" k="10" /> +<hkern u1="n" u2="*" k="16" /> +<hkern u1="n" u2=")" k="33" /> +<hkern u1="o" u2="’" k="53" /> +<hkern u1="o" u2="‘" k="53" /> +<hkern u1="o" u2="Æ" k="20" /> +<hkern u1="o" u2="}" k="35" /> +<hkern u1="o" u2="z" k="12" /> +<hkern u1="o" u2="y" k="20" /> +<hkern u1="o" u2="x" k="39" /> +<hkern u1="o" u2="w" k="14" /> +<hkern u1="o" u2="v" k="18" /> +<hkern u1="o" u2="t" k="16" /> +<hkern u1="o" u2="f" k="16" /> +<hkern u1="o" u2="]" k="59" /> +<hkern u1="o" u2="\" k="76" /> +<hkern u1="o" u2="Z" k="41" /> +<hkern u1="o" u2="Y" k="123" /> +<hkern u1="o" u2="X" k="66" /> +<hkern u1="o" u2="W" k="78" /> +<hkern u1="o" u2="V" k="88" /> +<hkern u1="o" u2="U" k="18" /> +<hkern u1="o" u2="T" k="131" /> +<hkern u1="o" u2="S" k="23" /> +<hkern u1="o" u2="J" k="29" /> +<hkern u1="o" u2="I" k="18" /> +<hkern u1="o" u2="A" k="23" /> +<hkern u1="o" u2="?" k="20" /> +<hkern u1="o" u2="/" k="43" /> +<hkern u1="o" u2="*" k="23" /> +<hkern u1="o" u2=")" k="55" /> +<hkern u1="o" u2="'" k="23" /> +<hkern u1="q" u2="j" k="-119" /> +<hkern u1="r" u2="‹" k="55" /> +<hkern u1="r" u2="ð" k="57" /> +<hkern u1="r" u2="Æ" k="92" /> +<hkern u1="r" u2="}" k="20" /> +<hkern u1="r" u2="o" k="20" /> +<hkern u1="r" u2="a" k="10" /> +<hkern u1="r" u2="]" k="39" /> +<hkern u1="r" u2="Z" k="29" /> +<hkern u1="r" u2="Y" k="14" /> +<hkern u1="r" u2="X" k="61" /> +<hkern u1="r" u2="T" k="139" /> +<hkern u1="r" u2="J" k="86" /> +<hkern u1="r" u2="A" k="90" /> +<hkern u1="r" u2=":" k="33" /> +<hkern u1="r" u2="/" k="88" /> +<hkern u1="r" u2="." k="92" /> +<hkern u1="r" u2="-" k="57" /> +<hkern u1="r" u2=")" k="37" /> +<hkern u1="r" u2="&" k="27" /> +<hkern u1="s" u2="}" k="20" /> +<hkern u1="s" u2="x" k="8" /> +<hkern u1="s" u2="v" k="8" /> +<hkern u1="s" u2="]" k="43" /> +<hkern u1="s" u2="\" k="53" /> +<hkern u1="s" u2="Y" k="92" /> +<hkern u1="s" u2="X" k="16" /> +<hkern u1="s" u2="W" k="51" /> +<hkern u1="s" u2="V" k="61" /> +<hkern u1="s" u2="U" k="18" /> +<hkern u1="s" u2="T" k="145" /> +<hkern u1="s" u2="O" k="10" /> +<hkern u1="s" u2="I" k="12" /> +<hkern u1="s" u2="A" k="10" /> +<hkern u1="s" u2="/" k="20" /> +<hkern u1="s" u2=")" k="41" /> +<hkern u1="t" u2="o" k="8" /> +<hkern u1="t" u2="]" k="25" /> +<hkern u1="t" u2="\" k="33" /> +<hkern u1="t" u2="Y" k="68" /> +<hkern u1="t" u2="W" k="25" /> +<hkern u1="t" u2="V" k="37" /> +<hkern u1="t" u2="U" k="12" /> +<hkern u1="t" u2="T" k="119" /> +<hkern u1="u" u2="]" k="37" /> +<hkern u1="u" u2="\" k="41" /> +<hkern u1="u" u2="Z" k="14" /> +<hkern u1="u" u2="Y" k="72" /> +<hkern u1="u" u2="X" k="14" /> +<hkern u1="u" u2="W" k="51" /> +<hkern u1="u" u2="V" k="61" /> +<hkern u1="u" u2="U" k="10" /> +<hkern u1="u" u2="T" k="100" /> +<hkern u1="u" u2="O" k="10" /> +<hkern u1="u" u2="J" k="16" /> +<hkern u1="u" u2="I" k="10" /> +<hkern u1="u" u2=")" k="31" /> +<hkern u1="v" u2="‹" k="37" /> +<hkern u1="v" u2="ð" k="35" /> +<hkern u1="v" u2="Æ" k="66" /> +<hkern u1="v" u2="s" k="14" /> +<hkern u1="v" u2="o" k="18" /> +<hkern u1="v" u2="a" k="14" /> +<hkern u1="v" u2="]" k="29" /> +<hkern u1="v" u2="Z" k="12" /> +<hkern u1="v" u2="Y" k="16" /> +<hkern u1="v" u2="X" k="49" /> +<hkern u1="v" u2="T" k="139" /> +<hkern u1="v" u2="J" k="53" /> +<hkern u1="v" u2="A" k="59" /> +<hkern u1="v" u2=":" k="18" /> +<hkern u1="v" u2="/" k="82" /> +<hkern u1="v" u2="." k="74" /> +<hkern u1="v" u2="*" k="-18" /> +<hkern u1="v" u2=")" k="27" /> +<hkern u1="w" u2="‹" k="29" /> +<hkern u1="w" u2="ð" k="29" /> +<hkern u1="w" u2="Æ" k="59" /> +<hkern u1="w" u2="s" k="8" /> +<hkern u1="w" u2="o" k="14" /> +<hkern u1="w" u2="a" k="10" /> +<hkern u1="w" u2="]" k="33" /> +<hkern u1="w" u2="Z" k="16" /> +<hkern u1="w" u2="Y" k="27" /> +<hkern u1="w" u2="X" k="53" /> +<hkern u1="w" u2="T" k="133" /> +<hkern u1="w" u2="J" k="57" /> +<hkern u1="w" u2="A" k="51" /> +<hkern u1="w" u2="/" k="72" /> +<hkern u1="w" u2="." k="59" /> +<hkern u1="w" u2=")" k="31" /> +<hkern u1="x" u2="‹" k="45" /> +<hkern u1="x" u2="ð" k="45" /> +<hkern u1="x" u2="o" k="41" /> +<hkern u1="x" u2="a" k="10" /> +<hkern u1="x" u2="Y" k="39" /> +<hkern u1="x" u2="V" k="16" /> +<hkern u1="x" u2="U" k="12" /> +<hkern u1="x" u2="T" k="135" /> +<hkern u1="x" u2="O" k="25" /> +<hkern u1="x" u2="-" k="49" /> +<hkern u1="y" u2="‹" k="37" /> +<hkern u1="y" u2="ð" k="35" /> +<hkern u1="y" u2="Æ" k="66" /> +<hkern u1="y" u2="s" k="12" /> +<hkern u1="y" u2="o" k="18" /> +<hkern u1="y" u2="a" k="14" /> +<hkern u1="y" u2="]" k="23" /> +<hkern u1="y" u2="Z" k="12" /> +<hkern u1="y" u2="Y" k="16" /> +<hkern u1="y" u2="X" k="47" /> +<hkern u1="y" u2="T" k="139" /> +<hkern u1="y" u2="J" k="49" /> +<hkern u1="y" u2="A" k="59" /> +<hkern u1="y" u2=":" k="18" /> +<hkern u1="y" u2="/" k="76" /> +<hkern u1="y" u2="." k="74" /> +<hkern u1="y" u2="*" k="-12" /> +<hkern u1="y" u2=")" k="23" /> +<hkern u1="z" u2="‹" k="31" /> +<hkern u1="z" u2="ð" k="14" /> +<hkern u1="z" u2="o" k="14" /> +<hkern u1="z" u2="]" k="33" /> +<hkern u1="z" u2="\" k="37" /> +<hkern u1="z" u2="Y" k="78" /> +<hkern u1="z" u2="W" k="33" /> +<hkern u1="z" u2="V" k="41" /> +<hkern u1="z" u2="U" k="20" /> +<hkern u1="z" u2="T" k="150" /> +<hkern u1="z" u2="O" k="12" /> +<hkern u1="z" u2="I" k="10" /> +<hkern u1="z" u2="-" k="35" /> +<hkern u1="{" u2="ð" k="23" /> +<hkern u1="{" u2="u" k="25" /> +<hkern u1="{" u2="s" k="20" /> +<hkern u1="{" u2="o" k="35" /> +<hkern u1="{" u2="j" k="-168" /> +<hkern u1="{" u2="a" k="20" /> +<hkern u1="{" u2="O" k="25" /> +<hkern u1="|" u2="j" k="-104" /> +<hkern u1="}" u2=")" k="20" /> +<hkern u1="®" u2="Æ" k="25" /> +<hkern u1="®" u2="Y" k="33" /> +<hkern u1="®" u2="X" k="25" /> +<hkern u1="®" u2="T" k="25" /> +<hkern u1="®" u2="J" k="25" /> +<hkern u1="®" u2="A" k="27" /> +<hkern u1="°" u2="4" k="49" /> +<hkern u1="·" u2="l" k="150" /> +<hkern u1="·" u2="7" k="41" /> +<hkern u1="·" u2="3" k="53" /> +<hkern u1="·" u2="2" k="51" /> +<hkern u1="·" u2="1" k="59" /> +<hkern u1="¿" u2="Y" k="39" /> +<hkern u1="¿" u2="W" k="31" /> +<hkern u1="¿" u2="V" k="37" /> +<hkern u1="¿" u2="T" k="41" /> +<hkern u1="Î" u2="}" k="-20" /> +<hkern u1="Þ" u2="Æ" k="39" /> +<hkern u1="Þ" u2="z" k="10" /> +<hkern u1="Þ" u2="x" k="14" /> +<hkern u1="Þ" u2="]" k="51" /> +<hkern u1="Þ" u2="\" k="35" /> +<hkern u1="Þ" u2="Z" k="27" /> +<hkern u1="Þ" u2="Y" k="49" /> +<hkern u1="Þ" u2="X" k="61" /> +<hkern u1="Þ" u2="W" k="12" /> +<hkern u1="Þ" u2="V" k="25" /> +<hkern u1="Þ" u2="T" k="37" /> +<hkern u1="Þ" u2="J" k="49" /> +<hkern u1="Þ" u2="A" k="39" /> +<hkern u1="Þ" u2="/" k="61" /> +<hkern u1="Þ" u2="." k="66" /> +<hkern u1="Þ" u2=")" k="45" /> +<hkern u1="ß" u2="y" k="14" /> +<hkern u1="ß" u2="x" k="18" /> +<hkern u1="ß" u2="w" k="10" /> +<hkern u1="ß" u2="v" k="14" /> +<hkern u1="ß" u2="t" k="14" /> +<hkern u1="ß" u2="f" k="12" /> +<hkern u1="ß" u2="]" k="25" /> +<hkern u1="ß" u2="\" k="20" /> +<hkern u1="ß" u2="Z" k="14" /> +<hkern u1="ß" u2="Y" k="37" /> +<hkern u1="ß" u2="X" k="31" /> +<hkern u1="ß" u2="W" k="27" /> +<hkern u1="ß" u2="V" k="33" /> +<hkern u1="ß" u2="U" k="20" /> +<hkern u1="ß" u2="T" k="31" /> +<hkern u1="ß" u2="S" k="10" /> +<hkern u1="ß" u2="O" k="10" /> +<hkern u1="ß" u2="J" k="14" /> +<hkern u1="ß" u2="I" k="16" /> +<hkern u1="ß" u2="A" k="14" /> +<hkern u1="ß" u2="/" k="31" /> +<hkern u1="ß" u2=")" k="33" /> +<hkern u1="í" u2="}" k="-33" /> +<hkern u1="í" u2="]" k="-55" /> +<hkern u1="í" u2="\" k="-18" /> +<hkern u1="í" u2="*" k="-37" /> +<hkern u1="î" u2="?" k="-35" /> +<hkern u1="î" u2="*" k="-84" /> +<hkern u1="ï" u2="}" k="-12" /> +<hkern u1="ï" u2="]" k="-33" /> +<hkern u1="ï" u2="*" k="-43" /> +<hkern u1="ð" u2="’" k="37" /> +<hkern u1="ð" u2="‘" k="37" /> +<hkern u1="ð" u2="Æ" k="14" /> +<hkern u1="ð" u2="}" k="20" /> +<hkern u1="ð" u2="z" k="8" /> +<hkern u1="ð" u2="y" k="12" /> +<hkern u1="ð" u2="x" k="27" /> +<hkern u1="ð" u2="w" k="8" /> +<hkern u1="ð" u2="v" k="14" /> +<hkern u1="ð" u2="t" k="12" /> +<hkern u1="ð" u2="f" k="10" /> +<hkern u1="ð" u2="]" k="39" /> +<hkern u1="ð" u2="\" k="33" /> +<hkern u1="ð" u2="Z" k="37" /> +<hkern u1="ð" u2="Y" k="80" /> +<hkern u1="ð" u2="X" k="61" /> +<hkern u1="ð" u2="W" k="59" /> +<hkern u1="ð" u2="V" k="70" /> +<hkern u1="ð" u2="U" k="18" /> +<hkern u1="ð" u2="T" k="82" /> +<hkern u1="ð" u2="S" k="16" /> +<hkern u1="ð" u2="J" k="25" /> +<hkern u1="ð" u2="I" k="12" /> +<hkern u1="ð" u2="A" k="20" /> +<hkern u1="ð" u2="/" k="39" /> +<hkern u1="ð" u2="*" k="18" /> +<hkern u1="ð" u2=")" k="39" /> +<hkern u1="ð" u2="'" k="18" /> +<hkern u1="‘" u2="ð" k="39" /> +<hkern u1="‘" u2="Æ" k="133" /> +<hkern u1="‘" u2="s" k="49" /> +<hkern u1="‘" u2="o" k="74" /> +<hkern u1="‘" u2="a" k="43" /> +<hkern u1="‘" u2="O" k="23" /> +<hkern u1="‘" u2="J" k="29" /> +<hkern u1="‘" u2="A" k="125" /> +<hkern u1="‘" u2="." k="309" /> +<hkern u1="’" u2="‹" k="33" /> +<hkern u1="’" u2="ð" k="39" /> +<hkern u1="’" u2="Æ" k="133" /> +<hkern u1="’" u2="®" k="25" /> +<hkern u1="’" u2="s" k="49" /> +<hkern u1="’" u2="o" k="74" /> +<hkern u1="’" u2="a" k="43" /> +<hkern u1="’" u2="O" k="23" /> +<hkern u1="’" u2="J" k="29" /> +<hkern u1="’" u2="A" k="125" /> +<hkern u1="’" u2="@" k="57" /> +<hkern u1="’" u2=":" k="156" /> +<hkern u1="’" u2="/" k="172" /> +<hkern u1="’" u2="." k="309" /> +<hkern u1="’" u2="&" k="45" /> +<hkern u1="‹" u2="Y" k="66" /> +<hkern u1="‹" u2="W" k="23" /> +<hkern u1="‹" u2="V" k="35" /> +<hkern u1="‹" u2="T" k="111" /> +<hkern u1="›" u2="z" k="25" /> +<hkern u1="›" u2="y" k="37" /> +<hkern u1="›" u2="x" k="43" /> +<hkern u1="›" u2="w" k="29" /> +<hkern u1="›" u2="v" k="37" /> +<hkern u1="›" u2="t" k="27" /> +<hkern u1="›" u2="s" k="20" /> +<hkern u1="›" u2="f" k="27" /> +<hkern u1="›" u2="Z" k="23" /> +<hkern u1="›" u2="Y" k="109" /> +<hkern u1="›" u2="X" k="33" /> +<hkern u1="›" u2="W" k="57" /> +<hkern u1="›" u2="V" k="72" /> +<hkern u1="›" u2="T" k="127" /> +<hkern u1="›" u2="J" k="27" /> +<hkern u1="›" u2="'" k="29" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/src/main/resources/static/resources/fonts/montserrat-webfont.ttf b/src/main/resources/static/resources/fonts/montserrat-webfont.ttf new file mode 100644 index 0000000..9953fe6 Binary files /dev/null and b/src/main/resources/static/resources/fonts/montserrat-webfont.ttf differ diff --git a/src/main/resources/static/resources/fonts/montserrat-webfont.woff b/src/main/resources/static/resources/fonts/montserrat-webfont.woff new file mode 100644 index 0000000..eb49333 Binary files /dev/null and b/src/main/resources/static/resources/fonts/montserrat-webfont.woff differ diff --git a/src/main/resources/static/resources/fonts/varela_round-webfont.eot b/src/main/resources/static/resources/fonts/varela_round-webfont.eot new file mode 100644 index 0000000..dfee0c2 Binary files /dev/null and b/src/main/resources/static/resources/fonts/varela_round-webfont.eot differ diff --git a/src/main/resources/static/resources/fonts/varela_round-webfont.svg b/src/main/resources/static/resources/fonts/varela_round-webfont.svg new file mode 100644 index 0000000..3280e2c --- /dev/null +++ b/src/main/resources/static/resources/fonts/varela_round-webfont.svg @@ -0,0 +1,7875 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="varela_roundregular" horiz-adv-x="1286" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="532" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode=" " horiz-adv-x="681" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="!" horiz-adv-x="575" d="M168 113.5q0 50.5 36 86.5t86 36t86 -36t36 -86.5t-36 -86t-86 -35.5t-86 35.5t-36 86zM182 1130v203q0 45 31 76t76 31t74.5 -31t29.5 -76v-203l-37 -675q-4 -60 -67 -60q-66 0 -70 60z" /> +<glyph unicode=""" horiz-adv-x="841" d="M123 1418q0 50 31.5 81t72.5 31t72 -31q33 -31 33 -81t-3 -93t-10.5 -92t-16.5 -95t-15 -73q-10 -57 -60 -57q-25 0 -40 15t-20 42t-14.5 73t-16.5 95t-10 92t-3 93zM510 1418q0 50 31.5 81t72.5 31t72 -31q33 -31 33 -81t-3 -93t-10.5 -92t-16.5 -95t-13 -73 q-12 -57 -62 -57q-25 0 -40 15t-20 42t-14.5 73t-16.5 95t-10 92t-3 93z" /> +<glyph unicode="#" horiz-adv-x="1253" d="M74 444q0 29 21.5 50.5t49.5 21.5h181l49 311h-158q-29 0 -50.5 21.5t-21.5 50.5t21.5 50.5t50.5 21.5h180l52 323q4 23 23.5 40.5t50 17.5t50 -20.5t19.5 -37t-1 -23.5t-5 -37t-15 -91l-28 -172h260l51 323q4 23 23.5 40.5t50 17.5t50 -20.5t19.5 -37t-1 -23.5t-5 -37 t-14 -91l-29 -172h158q29 0 50.5 -21.5t21.5 -50.5t-21.5 -50.5t-50.5 -21.5h-180l-49 -311h157q29 0 50.5 -21.5t21.5 -50.5t-21.5 -50t-50.5 -21h-180l-51 -324q-4 -23 -23.5 -41t-48.5 -18t-50.5 20.5t-21.5 39t50 323.5h-260l-52 -324q-4 -23 -23.5 -41t-47.5 -18 q-29 0 -50.5 20.5t-21.5 39t49 323.5h-158q-29 0 -50 21.5t-21 49.5zM471 516h260l49 311h-260z" /> +<glyph unicode="$" horiz-adv-x="1253" d="M96.5 149q-0.5 44 22 68.5t52.5 24.5t71 -19q143 -63 350 -69v469q-227 59 -311 114.5t-127 123t-43 159.5t30.5 164.5t91.5 130.5q131 121 359 133v160q0 20 12 33.5t33 13.5q20 0 33.5 -13.5t13.5 -33.5v-158q207 -8 365 -68q57 -20 57 -82q0 -31 -21.5 -57t-47 -26 t-68.5 16q-125 43 -285 47v-487q86 -20 172 -47t156 -72q154 -102 153 -295q0 -166 -131 -277t-350 -122v-160q0 -20 -13.5 -32.5t-33.5 -12.5q-45 0 -45 45v160q-231 10 -438 98q-57 27 -57.5 71zM295 1044q0 -135 180 -196q55 -18 117 -33v461q-129 -12 -213 -71t-84 -161 zM684 156q211 14 274 133q23 43 23 95t-23.5 84t-64.5 56q-59 37 -209 76v-444z" /> +<glyph unicode="%" horiz-adv-x="1667" d="M88 1098q0 252 186 338q62 28 144 28q158 0 246 -106q84 -100 84 -260t-84 -260q-88 -106 -246 -107q-156 0 -246 107q-84 96 -84 260zM231 1098q0 -98 47.5 -166t139.5 -68t139 67.5t47 166.5q0 98 -47 165.5t-139 67.5t-139.5 -67.5t-47.5 -165.5zM350 42q0 24 10 40 l834 1333q20 33 54 33t53.5 -16.5t19.5 -42t-14 -48.5l-828 -1325q-23 -37 -55.5 -36.5t-53 19.5t-20.5 43zM920 330q0 252 186 338q61 28 143 28q158 0 246 -106q84 -100 84 -260t-84 -260q-88 -106 -246 -107q-156 0 -245 107q-84 96 -84 260zM1063 330q0 -98 47 -166 t139 -68t139.5 67.5t47.5 166.5q0 98 -47.5 165.5t-139.5 67.5t-139 -67.5t-47 -165.5z" /> +<glyph unicode="&" horiz-adv-x="1499" d="M145 401q0 139 84 256q66 88 148 138q-53 66 -89 132t-36 151t26.5 150.5t75.5 114.5q106 106 281 107q137 0 272 -90q37 -20 37 -55t-20.5 -56.5t-44 -21.5t-54.5 16q-88 47 -161.5 47t-114.5 -16.5t-70 -42.5q-55 -53 -55 -114.5t11 -96.5t36 -70q35 -53 158 -166 l428 -403q35 53 56.5 100t43 61.5t53 14.5t56 -23.5t24.5 -52.5q0 -66 -108 -217l137 -131q33 -29 33 -63.5t-21.5 -60t-60.5 -25.5t-66 24l-137 131q-186 -160 -420 -159q-252 0 -387 135q-115 115 -115 286zM322 393.5q0 -55.5 24.5 -103.5t65.5 -81q86 -72 202.5 -72 t194.5 34t137 81l-457 428q-113 -72 -153 -188q-14 -43 -14 -98.5z" /> +<glyph unicode="'" horiz-adv-x="487" d="M129 1042.5q0 28.5 31 47.5q45 27 74.5 66.5t29.5 123.5h-8q-47 0 -81 34t-34 81v12q0 47 34 81t81 34h20q48 0 81.5 -34t33.5 -81v-121q0 -109 -55 -192q-39 -61 -113 -107q-10 -10 -35.5 -10t-42 18.5t-16.5 47z" /> +<glyph unicode="(" horiz-adv-x="638" d="M104 629q0 258 71 494.5t218 412.5q14 16 27.5 26.5t43.5 10.5t54.5 -22.5t24.5 -52.5t-13 -50q-240 -401 -239 -819q-1 -418 239 -819q12 -23 12.5 -51.5t-24 -51t-54.5 -22.5t-43 10t-28 26q-147 176 -218 413t-71 495z" /> +<glyph unicode=")" horiz-adv-x="638" d="M98 -241.5q0 28.5 13 51.5q240 401 239 819q0 418 -239 819q-12 20 -12.5 50t24 52.5t54.5 22.5t43 -10.5t28 -26.5q147 -176 218 -412.5t71 -494.5t-71 -494.5t-218 -413.5q-14 -16 -27.5 -26t-43.5 -10t-54.5 22.5t-24.5 51z" /> +<glyph unicode="*" horiz-adv-x="854" d="M135 977q0 41 29 55q2 0 6 2t23.5 10.5t60.5 23.5t115 44l-205 80q-29 18 -29 43q0 55 45 70q23 8 45 -7q2 0 56.5 -44t115.5 -93q-33 207 -32 211v6q0 27 19 43.5t42 16.5t42 -16.5t19 -31t-1 -18.5t-3 -24l-10 -66q-6 -43 -18 -121l172 137q23 14 45 7q45 -14 45 -54.5 t-29 -58.5q-2 0 -6 -2t-23.5 -10.5t-60.5 -23.5t-115 -44l205 -80q29 -14 29 -41q0 -55 -45 -69q-29 -10 -51 8q-6 4 -55.5 44t-110.5 89q12 -78 18 -121l10 -65q2 -20 3 -24.5t1 -19t-19 -31t-42 -16.5t-42 16.5t-19 31.5v18q0 10 10 71.5t22 139.5q-172 -137 -183 -143.5 t-34 2.5q-45 14 -45 55z" /> +<glyph unicode="+" horiz-adv-x="1150" d="M82 707q0 35 21.5 57t56.5 22h336v336q0 35 22.5 57.5t56.5 22.5q35 0 57.5 -22.5t22.5 -57.5v-336h334q35 0 57.5 -22.5t22.5 -56.5q0 -35 -22.5 -56.5t-57.5 -21.5h-334v-336q0 -35 -22.5 -57.5t-57.5 -22.5t-57 22.5t-22 57.5v336h-336q-35 0 -56.5 21.5t-21.5 56.5z " /> +<glyph unicode="," horiz-adv-x="532" d="M129 -243.5q0 28.5 31 46.5q45 27 74.5 67t29.5 124h-8q-47 0 -81 33.5t-34 81.5v12q0 47 34 81t81 34h20q48 0 81.5 -34t33.5 -81v-121q0 -109 -55 -193q-39 -61 -113 -106q-10 -10 -35.5 -10t-42 18.5t-16.5 47z" /> +<glyph unicode="-" horiz-adv-x="835" d="M141 573q0 35 23.5 59.5t58.5 24.5h387q35 0 59.5 -24.5t24.5 -59.5t-24.5 -58t-59.5 -23h-387q-35 0 -58.5 23.5t-23.5 57.5z" /> +<glyph unicode="." horiz-adv-x="532" d="M141 109v12q0 47 34 81t81 34h20q48 0 81.5 -34t33.5 -81v-12q0 -47 -33.5 -81t-81.5 -34h-20q-47 0 -81 33.5t-34 81.5z" /> +<glyph unicode="/" horiz-adv-x="907" d="M98 -123q0 31 6 43l543 1587q18 57 82 58q35 0 58.5 -24.5t23.5 -45.5q0 -33 -6 -45l-543 -1587q-18 -57 -80 -58q-37 0 -60.5 25t-23.5 47z" /> +<glyph unicode="0" d="M88 715q0 338 139 530q146 205 416 205q137 0 241.5 -53.5t174.5 -151.5q139 -193 139 -530q0 -340 -139 -533q-147 -203 -415.5 -202.5t-416.5 202.5q-139 193 -139 533zM274 715q0 -262 95 -412q94 -151 274 -151t275 151q94 150 94 412q0 260 -94 409 q-94 152 -275.5 152t-275 -151.5t-93.5 -409.5z" /> +<glyph unicode="1" d="M262 1195q0 48 53 75l279 145q29 14 57 15h43q41 0 70 -29t29 -70v-1157h202q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-633q-37 0 -61.5 24.5t-24.5 61.5t25 62.5t61 25.5h244v1038l-209 -102l-20 -8t-38 -4t-52.5 24.5t-24.5 72.5z" /> +<glyph unicode="2" d="M133 106q0 109 60.5 195t151.5 160t197.5 139.5t197.5 131t151.5 135t60.5 139t-17 115.5t-54 79q-82 74 -252 74q-182 0 -350 -74q-20 -10 -47 -10t-48.5 22.5t-21.5 65.5t45 68q209 104 455 104q201 0 333 -115q137 -117 138 -301q0 -186 -187 -358 q-82 -74 -179 -139.5t-187.5 -126t-162 -119t-98.5 -117.5h713q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-790q-47 0 -78 29.5t-31 76.5z" /> +<glyph unicode="3" d="M121 139q0 33 22.5 59.5t50 26.5t68.5 -16q127 -51 305 -51q256 0 346 116q33 43 33 111q0 258 -452 258h-33q-35 0 -60.5 25.5t-25.5 60.5t25.5 60.5t60.5 25.5h12q422 0 422 248q0 96 -79 154.5t-245 58.5q-168 0 -317 -68q-16 -8 -42 -8t-48.5 20.5t-22.5 61.5t41 64 q193 104 418 104t353 -96.5t128 -272.5q0 -248 -247 -342q195 -47 268 -204q31 -66 31 -162.5t-41 -170t-113 -122.5q-145 -100 -377 -100q-225 0 -428 81q-53 25 -53 78z" /> +<glyph unicode="4" d="M51 477v19q0 43 25 73l643 822q35 49 102 49h41q53 0 86 -35t33 -84v-795h156q35 0 59.5 -24.5t24.5 -59.5t-25 -58.5t-59 -23.5h-156v-278q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v278h-625q-49 0 -84 34t-35 83zM250 526h545v703z" /> +<glyph unicode="5" d="M131 165q0 42 22.5 68.5t52.5 26.5t73 -22q141 -74 305 -74q293 0 370 149q29 55 29 140q0 127 -85 200.5t-210 73.5q-190 0 -338 -88q-43 -25 -86 -25t-82 32t-39 87q0 29 4 49l93 545q6 47 35.5 75t72.5 28h658q37 0 62.5 -26t25.5 -63t-26 -61.5t-62 -24.5h-594 l-66 -434q154 84 346 84q227 0 357 -131q121 -125 120 -332q0 -324 -309 -426q-106 -37 -250 -36q-250 0 -438 118q-41 25 -41 67z" /> +<glyph unicode="6" d="M121 737q0 94 29.5 225.5t98 239t182.5 178t263.5 70.5t235.5 -27.5t147 -60.5q43 -25 43 -66t-22.5 -66.5t-52 -25.5t-62.5 17q-111 49 -249 49t-220 -56.5t-129 -136.5q-74 -133 -86 -332q90 119 270 164q66 16 160 16.5t180 -33.5t148 -97q131 -133 131 -351 q0 -199 -135 -329q-139 -135 -371 -135q-233 0 -371 126q-162 154 -184 455q-6 82 -6 176zM309 530q37 -266 211 -346q68 -31 153 -30.5t143 24t99 64.5q86 86 86 214t-75.5 214t-229.5 86q-160 0 -266 -82q-74 -55 -121 -144z" /> +<glyph unicode="7" d="M123 1339q0 37 25.5 64t62.5 27h836q49 0 81.5 -31t32.5 -77t-20 -91l-582 -1190q-29 -51 -79 -51t-75.5 25.5t-25.5 58t12 57.5l563 1120h-743q-37 0 -62.5 26t-25.5 62z" /> +<glyph unicode="8" d="M96 377q0 160 84 251t221 138q-164 57 -217 197q-20 51 -20 112.5t24.5 127t81.5 120.5q129 127 373 127t373 -127q106 -105 106 -248q0 -61 -19.5 -111.5t-51.5 -89.5q-61 -72 -166 -108q137 -47 221 -138t84 -249q0 -162 -121 -268q-147 -131 -426 -131t-426 131 q-121 106 -121 266zM283 399q0 -90 77 -161q97 -95 283 -95t283 95q78 72 78 151.5t-30 130.5t-81 86q-98 70 -248.5 70t-251.5 -70q-111 -76 -110 -207zM350 1068q0 -87 70.5 -155.5t222.5 -68.5t229 76q63 61 63.5 148t-71 152.5t-221.5 65.5t-221.5 -65.5t-71.5 -152.5z " /> +<glyph unicode="9" d="M98 985q0 201 135 330q143 135 371 135q233 0 371 -127q162 -154 184 -455q6 -82 6 -177t-29.5 -225t-98 -237.5t-183.5 -178t-263.5 -70.5t-234.5 27.5t-147 60.5q-43 25 -43 65.5t22.5 66t51 25.5t63.5 -16q115 -49 250 -49t218 56t130 136q74 133 86 332 q-90 -119 -270 -164q-66 -16 -160 -16t-180 33.5t-148 97.5q-131 133 -131 350zM285 974q0 -128 75.5 -214t229.5 -86q160 0 266 82q74 55 121 143q-37 266 -211 346q-68 31 -153 31t-143 -23.5t-99 -64.5q-86 -86 -86 -214z" /> +<glyph unicode=":" horiz-adv-x="532" d="M141 109v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-12q0 -47 -33.5 -81t-81.5 -34h-20q-47 0 -81 33.5t-34 81.5zM141 924v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-12q0 -47 -33.5 -81t-81.5 -34h-20q-47 0 -81 34t-34 81z" /> +<glyph unicode=";" horiz-adv-x="532" d="M129 -243.5q0 28.5 31 46.5q45 27 74.5 67t29.5 124h-8q-47 0 -81 33.5t-34 81.5v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-121q0 -109 -55 -193q-39 -61 -113 -106q-10 -10 -35.5 -10t-42 18.5t-16.5 47zM141 924v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-12 q0 -47 -33.5 -81t-81.5 -34h-20q-47 0 -81 34t-34 81z" /> +<glyph unicode="<" horiz-adv-x="1187" d="M72 598v16q0 72 73 107l818 366q14 6 40.5 6.5t50 -23t23.5 -54.5q0 -59 -55 -82l-737 -328l737 -327q25 -10 40 -32t15 -51.5t-23.5 -53t-50 -23.5t-40.5 6l-818 367q-74 35 -73 106z" /> +<glyph unicode="=" horiz-adv-x="1458" d="M150 449q0 35 22.5 57t56.5 22h1000q35 0 57.5 -22.5t22.5 -56.5q0 -35 -22.5 -57.5t-57.5 -22.5h-1000q-35 0 -57 22.5t-22 57.5zM150 907q0 35 22.5 57.5t56.5 22.5h1000q35 0 57.5 -22.5t22.5 -57.5t-22.5 -57.5t-57.5 -22.5h-1000q-35 0 -57 22.5t-22 57.5z" /> +<glyph unicode=">" horiz-adv-x="1187" d="M111 197q0 59 55 82l737 327l-737 328q-25 10 -40 31.5t-15 51.5t23.5 53.5t49 23.5t41.5 -7l817 -366q74 -35 74 -107v-16q0 -72 -74 -106l-817 -367q-16 -6 -41.5 -6t-49 23.5t-23.5 54.5z" /> +<glyph unicode="?" horiz-adv-x="1017" d="M53 1270q0 51 51 82q160 98 361 98q211 0 334 -104q127 -106 127 -283q0 -184 -193 -326q-113 -84 -162 -164q-29 -47 -28.5 -97t-27.5 -72.5t-64.5 -22.5t-62.5 23.5t-26 56.5q0 203 191 350q123 98 155.5 144.5t32.5 97.5q0 223 -292 223q-160 0 -263 -68 q-27 -16 -56.5 -16t-53 23.5t-23.5 54.5zM328 113.5q0 50.5 35.5 86.5t86 36t86 -36t35.5 -86.5t-35.5 -86t-86 -35.5t-86 35.5t-35.5 86z" /> +<glyph unicode="@" horiz-adv-x="1839" d="M100 555q0 158 70 315.5t187.5 277.5t275.5 190.5t325.5 70.5t310 -52t249 -145.5t169 -223.5t62.5 -288q0 -205 -86 -344q-104 -162 -295 -161q-154 0 -209 96q-14 29 -20 55q-127 -154 -338 -153q-164 0 -260 102q-88 98 -88 237.5t42 232.5t109 157q137 129 334 129 q152 0 262 -105l6 35q4 29 25.5 46t51.5 17t51.5 -21.5t21.5 -39.5v-22q0 -4 -2 -15l-68 -389q-14 -86 -14 -136t23.5 -90t78.5 -40q129 0 196.5 112.5t67.5 278.5t-58 278.5t-155 188.5q-190 152 -456 151q-156 0 -294 -61t-242.5 -165.5t-165 -243t-60.5 -271.5t40 -240.5 t118 -191.5q174 -190 454 -190q133 0 209 20q94 25 163 51.5t85 26.5t30.5 -13.5t14.5 -41t-29 -41.5q-217 -109 -473 -109q-164 0 -297 58.5t-227 155.5t-144.5 225t-50.5 286zM610 573q0 -121 70 -184q61 -55 166 -55q174 0 254 145q31 55 45 142l33 190q-88 94 -232 94 q-139 0 -233 -86q-102 -94 -103 -246z" /> +<glyph unicode="A" horiz-adv-x="1427" d="M53 70.5q0 27.5 10 52.5l523 1233q37 84 119 84h20q82 0 119 -84l522 -1233q10 -25 10 -52.5t-24.5 -54t-77.5 -26.5t-78 57l-133 320h-696l-134 -320q-25 -57 -78 -57t-77.5 26.5t-24.5 54zM438 537h553l-276 665z" /> +<glyph unicode="B" horiz-adv-x="1419" d="M199 92v1243q0 39 26.5 67t65.5 28h483q225 0 342 -102.5t117 -268.5q0 -221 -201 -316q195 -66 258 -215q23 -57 23 -137t-29 -153.5t-92 -126.5q-131 -111 -406 -111h-495q-39 0 -65.5 26.5t-26.5 65.5zM385 174h383q291 0 346 139q18 43 19 97q0 123 -92.5 178 t-270.5 55h-385v-469zM385 811h340q264 0 315 141q15 43 15 92q0 96 -77 153.5t-218 57.5h-375v-444z" /> +<glyph unicode="C" horiz-adv-x="1429" d="M319 1253q199 197 512 197q152 0 261.5 -37t168 -68.5t70.5 -51t12 -49.5t-21.5 -53.5t-51 -23.5t-45.5 9q-82 43 -168 69.5t-214 26.5t-231.5 -43t-173.5 -119q-137 -150 -137 -395q0 -246 137 -396q149 -161 409 -161h3q121 0 207 26.5t168 69.5q16 8 45.5 8t51 -23.5 t21.5 -54.5q0 -55 -45 -78q-96 -53 -205.5 -89.5t-262 -36.5t-283.5 50t-228 146q-204 200 -204 536q0 341 204 541z" /> +<glyph unicode="D" horiz-adv-x="1536" d="M199 92v1243q0 39 26.5 67t65.5 28h411q342 0 545 -230q90 -100 134 -228t44 -257t-44 -257t-134 -229q-203 -229 -545 -229h-411q-39 0 -65.5 26.5t-26.5 65.5zM385 174h295q254 0 410 150q152 150 152 389q0 242 -152 393q-155 149 -407 149h-3h-295v-1081z" /> +<glyph unicode="E" horiz-adv-x="1306" d="M199 92v1243q0 39 26.5 67t65.5 28h821q37 0 62.5 -26t25.5 -63t-25.5 -61.5t-62.5 -24.5h-727v-452h653q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-653v-455h727q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-821q-39 0 -65.5 26.5t-26.5 65.5z " /> +<glyph unicode="F" horiz-adv-x="1249" d="M199 82v1253q0 39 26.5 67t65.5 28h796q37 0 63 -26t26 -63t-26 -61.5t-63 -24.5h-702v-452h631q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-631v-547q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="G" horiz-adv-x="1523" d="M113 713q0 326 206 536q199 201 506 201q174 0 294 -43t216 -104q41 -23 41 -65t-22.5 -67.5t-54 -25.5t-52.5 10q-199 115 -401 115q-238 0 -389 -144q-158 -152 -158 -413q0 -242 147 -398q152 -159 410 -159q193 0 358 90v370h-337q-35 0 -59.5 25t-24.5 59 q0 35 24.5 59.5t59.5 24.5h403q41 0 69.5 -28.5t28.5 -69.5v-465q0 -43 -21.5 -76.5t-56.5 -50.5q-227 -114 -465 -114h-4q-322 0 -520 204q-199 207 -198 529z" /> +<glyph unicode="H" horiz-adv-x="1546" d="M199 82v1264q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-545h776v545q0 39 26.5 66.5t65.5 27.5t67 -28t28 -66v-1264q0 -39 -28 -65.5t-67 -26.5t-65.5 26.5t-26.5 65.5v545h-776v-545q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="I" horiz-adv-x="583" d="M199 82v1264q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-1264q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="J" horiz-adv-x="954" d="M25 116q0 42 21.5 67.5t49 25.5t56.5 -14q78 -39 150.5 -39t117.5 11t80 44q78 74 78 248v887q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-875q0 -268 -133 -393q-106 -98 -289 -98q-150 0 -272 69q-45 25 -45 67z" /> +<glyph unicode="K" horiz-adv-x="1372" d="M199 82v1264q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-652l700 713q27 33 67 33t64.5 -23.5t24.5 -61.5t-22 -61l-474 -471l543 -684q23 -29 23 -63.5t-25.5 -60t-68.5 -25.5t-70 37l-529 673l-233 -235v-383q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z " /> +<glyph unicode="L" horiz-adv-x="1179" d="M199 129v1217q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-1160h670q39 0 66.5 -27.5t27.5 -66.5t-27.5 -65.5t-66.5 -26.5h-727q-53 0 -91 38t-38 91z" /> +<glyph unicode="M" horiz-adv-x="1978" d="M199 82v1223q0 55 38.5 95t94.5 40h67q41 0 75 -24.5t50 -61.5l465 -1159l465 1159q16 37 50 61.5t75 24.5h68q55 0 94 -40t39 -95v-1223q0 -39 -27 -65.5t-65 -26.5q-39 0 -67 26.5t-28 65.5v1163l-473 -1169q-16 -39 -51 -62.5t-80 -23.5t-80 23.5t-51 62.5l-473 1169 v-1163q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="N" horiz-adv-x="1644" d="M199 82v1223q0 55 38.5 95t94.5 40h26q63 0 113 -62l789 -1138v1106q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-1223q0 -55 -40 -94t-95 -39h-25q-68 0 -108 55l-793 1145v-1108q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="O" horiz-adv-x="1660" d="M113 715q4 324 198 528q194 207 520 207q324 0 521 -207q190 -203 198 -528q-8 -326 -198 -529q-196 -206 -518 -206h-3q-326 0 -520 206q-195 205 -198 529zM299 715q0 -244 139 -400q143 -161 393 -161t394 161q139 156 139 400t-139 399q-143 162 -394 162 q-250 0 -393 -162q-139 -156 -139 -399z" /> +<glyph unicode="P" horiz-adv-x="1370" d="M199 82v1253q0 39 26.5 67t65.5 28h467q285 0 428 -148q119 -119 119 -307t-119 -307q-143 -147 -428 -148h-373v-438q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5zM385 696h354q211 0 305 90q74 70 74 189q0 190 -190 254q-71 24 -180 24h-9h-354v-557z" /> +<glyph unicode="Q" horiz-adv-x="1662" d="M113 715q4 324 198 528q195 207 520 207q324 0 521 -207q190 -203 198 -528q-4 -242 -114.5 -420t-309.5 -260l181 -199q25 -25 25 -59q0 -36 -26 -63q-26 -25 -64 -25t-64 32l-224 267q-57 -8 -123 -8q-326 0 -520 206q-195 205 -198 529zM299 715q0 -244 139 -400 q143 -161 393 -161t394 161q139 156 139 400t-139 399q-143 162 -394 162q-250 0 -393 -162q-139 -156 -139 -399z" /> +<glyph unicode="R" horiz-adv-x="1458" d="M199 82v1253q0 39 26.5 67t65.5 28h477q281 0 424 -119q133 -113 133 -297q0 -119 -66.5 -221.5t-201.5 -149.5q147 -39 213 -213q43 -117 43 -254v-94q0 -39 -26.5 -65.5t-67.5 -26.5t-67 25.5t-26 66.5v61q0 166 -36.5 244t-100 124t-180.5 46h-424v-475 q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5zM385 733h371q172 0 277.5 67.5t105.5 198.5q0 123 -82 185q-97 69 -306 69h-6h-360v-520z" /> +<glyph unicode="S" horiz-adv-x="1261" d="M104 165q0 32 23 57.5t52.5 25.5t73.5 -19.5t144.5 -46t233.5 -26.5q358 0 358 235q0 98 -137 158q-59 25 -138 44t-160 41.5t-160 51.5t-140 74q-135 102 -135 270q0 180 135 295q147 125 395 125q223 0 408 -68q57 -20 57 -82q0 -31 -21.5 -58.5t-47 -27.5t-70.5 17 q-133 47 -305 47q-158 0 -260 -59q-104 -61 -105 -175q0 -117 135 -176q61 -29 139 -47t160 -38.5t160 -48t139 -72.5q135 -98 136 -283q0 -176 -142 -287q-144 -112 -379 -112h-4q-260 0 -487 98q-23 10 -40.5 32.5t-17.5 54.5z" /> +<glyph unicode="T" horiz-adv-x="1251" d="M29 1341q0 37 24.5 63t61.5 26h1020q36 0 62 -26t26 -63t-26 -61.5t-62 -24.5h-416v-1173q0 -39 -27.5 -65.5t-66.5 -26.5t-66 26.5t-27 65.5v1173h-417q-37 0 -61.5 25t-24.5 61z" /> +<glyph unicode="U" horiz-adv-x="1552" d="M188 537v809q0 39 27 66.5t66 27.5t66.5 -28t27.5 -66v-816q0 -182 125 -286q115 -94 276 -94q162 0 277 94q125 104 125 286v816q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-809q0 -268 -193 -422q-166 -135 -395 -135q-233 0 -397 135q-190 154 -191 422z" /> +<glyph unicode="V" horiz-adv-x="1421" d="M49 1355.5q0 30.5 24.5 57.5t61.5 27q68 0 94 -64l482 -1200l481 1200q27 64 79 64h2q51 0 75 -27t24 -57.5t-6 -44.5l-506 -1227q-43 -94 -127 -94h-45q-84 0 -127 94l-506 1227q-6 14 -6 44.5z" /> +<glyph unicode="W" horiz-adv-x="2062" d="M53 1365.5q0 27.5 24.5 51t61.5 23.5q74 0 97 -74l344 -1130l346 1126q10 35 39.5 56.5t66.5 21.5t66.5 -21.5t40.5 -56.5l346 -1126l344 1130q23 74 92 74q41 0 65.5 -23.5t24.5 -51.5t-6 -50l-401 -1233q-33 -92 -121 -92q-41 0 -75 25.5t-46 66.5l-330 1044 l-330 -1044q-12 -41 -45.5 -66.5t-74.5 -25.5q-88 0 -121 92l-402 1233q-6 23 -6 50.5z" /> +<glyph unicode="X" horiz-adv-x="1370" d="M88 75q0 34 18 58l474 582l-469 577q-19 26 -19 62q0 34 26 60t69.5 26t70.5 -37l432 -549l432 553q23 33 64 33t67.5 -25.5t26.5 -58.5t-16 -56l-473 -583l473 -582q18 -23 18 -56.5t-24.5 -61t-57.5 -27.5q-55 0 -84 39l-438 551l-432 -553q-31 -37 -69 -37t-63.5 25.5 t-25.5 59.5z" /> +<glyph unicode="Y" horiz-adv-x="1320" d="M61 1353q0 34 25 60q25 27 71 27t76 -47l429 -623l428 623q31 47 76.5 47t70.5 -27t25 -61.5t-17 -61.5l-491 -686v-522q0 -39 -27 -65.5t-65 -26.5q-39 0 -67 26.5t-28 65.5v522l-489 686q-17 28 -17 63z" /> +<glyph unicode="Z" horiz-adv-x="1306" d="M96 117q0 47 25 78l856 1056h-789q-37 0 -62.5 26t-25.5 62q0 37 26 64t62 27h889q59 0 92 -38t33 -86.5t-33 -84.5l-845 -1047h802q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-911q-49 0 -84 35t-35 82z" /> +<glyph unicode="[" horiz-adv-x="659" d="M178 -180v1589q0 37 26.5 63.5t63.5 26.5h260q31 0 52.5 -21.5t21.5 -52.5t-21.5 -52t-52.5 -21h-188v-1477h188q31 0 52.5 -21.5t21.5 -50.5t-21.5 -51t-52.5 -22h-260q-37 0 -63.5 26.5t-26.5 63.5z" /> +<glyph unicode="\" horiz-adv-x="907" d="M96 1489q0 27 23.5 51.5t56.5 24.5q66 0 84 -58l543 -1587q6 -12 6 -38.5t-23.5 -51.5t-56.5 -25q-66 0 -84 58l-543 1587q-6 12 -6 39z" /> +<glyph unicode="]" horiz-adv-x="659" d="M57 -197q0 29 21.5 50.5t52.5 21.5h188v1477h-188q-31 0 -52.5 21.5t-21.5 51.5q0 31 21.5 52.5t52.5 21.5h260q37 0 63.5 -26.5t26.5 -63.5v-1589q0 -37 -26.5 -63.5t-63.5 -26.5h-260q-31 0 -52.5 22.5t-21.5 50.5z" /> +<glyph unicode="^" horiz-adv-x="1073" d="M168 914.5q0 19.5 4 27.5t8 19l215 407q16 29 38 49.5t63 20.5h77q41 0 62.5 -20.5t38.5 -49.5l215 -407q4 -10 8 -18.5t4 -28t-20.5 -42t-53.5 -22.5q-41 0 -61 33q-4 8 -26.5 46t-70.5 115.5t-134 217.5q-86 -139 -133.5 -216t-71 -115t-27.5 -46q-20 -35 -57 -35 t-57.5 22.5t-20.5 42z" /> +<glyph unicode="_" horiz-adv-x="1357" d="M106 -233q0 29 19.5 48t48.5 19h1010q28 0 47.5 -19.5t19.5 -47.5q0 -29 -19.5 -48.5t-47.5 -19.5h-1010q-29 0 -48.5 19.5t-19.5 48.5z" /> +<glyph unicode="`" horiz-adv-x="503" d="M141 1403q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51z" /> +<glyph unicode="a" horiz-adv-x="1136" d="M78 287q0 152 115 237q125 94 356 94h248v17q0 137 -67.5 195.5t-207.5 58.5q-119 0 -272 -49q-16 -4 -36.5 -4t-43.5 22q-23 21 -23 64q0 46 54 69q172 74 356 74q209 0 324 -127q102 -111 102 -276v-580q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v53 q-55 -57 -148.5 -106t-236.5 -49q-141 0 -236 81q-98 86 -98 226zM264 307q0 -164 217 -164q96 0 179 47.5t137 106.5v172h-224q-145 0 -227 -37t-82 -125z" /> +<glyph unicode="b" horiz-adv-x="1292" d="M162 82v1329q0 41 26.5 67.5t66.5 26.5t66.5 -26.5t26.5 -67.5v-502q152 156 350.5 156t339.5 -141q156 -156 156 -402q0 -250 -156 -403q-143 -139 -340.5 -139t-349.5 155v-53q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5zM348 307q138 -153 322 -153h2 q233 0 311 208q25 70 25 160q0 176 -95 277q-90 92 -241 92q-184 0 -324 -154v-430z" /> +<glyph unicode="c" horiz-adv-x="1097" d="M94 522q0 248 164 400q156 143 383 143q123 0 202 -32t126 -62.5t47 -67.5t-22.5 -63.5t-45.5 -26.5q-35 0 -71 21q-104 57 -220 57q-180 0 -278 -101.5t-98 -267.5t98 -267t278 -101q115 0 220 57q37 20 65.5 20t51 -26.5t22.5 -63.5t-47 -67q-145 -94 -328 -94 q-227 0 -383 143q-164 152 -164 399z" /> +<glyph unicode="d" horiz-adv-x="1292" d="M98 522q0 246 156 402q141 141 340 141t350 -156v502q0 41 26.5 67.5t66.5 26.5t66.5 -26.5t26.5 -67.5v-1329q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5v53q-151 -155 -347 -155h-3q-197 0 -340 139q-156 154 -156 403zM285 522q0 -176 96 -276 q88 -92 240 -92q184 0 323 153v430q-139 154 -323 154q-233 0 -310 -209q-26 -68 -26 -154v-6z" /> +<glyph unicode="e" horiz-adv-x="1167" d="M100 522q0 225 117 375q131 168 373 168q229 0 362 -156q125 -145 125 -360q0 -39 -25.5 -65.5t-68.5 -26.5h-694q16 -140 104 -221.5t246 -81.5t264 53q37 18 63.5 18t51 -22.5t24.5 -50.5q0 -53 -44 -77t-78.5 -40.5t-75.5 -28.5q-89 -26 -204 -26h-9 q-252 0 -391.5 141t-139.5 401zM289 608h604q-8 145 -107 230q-81 69 -196 69q-182 0 -266 -162q-31 -57 -35 -137z" /> +<glyph unicode="f" horiz-adv-x="778" d="M39 965q0 35 22.5 57t57.5 22h121v119q0 178 100 275q82 78 207 78q96 0 178 -41q47 -27 47 -64t-21.5 -61.5t-54.5 -24.5l-102 12q-78 0 -123 -35.5t-45 -144.5v-113h256q35 0 57.5 -22.5t22.5 -56.5q0 -35 -22.5 -57.5t-57.5 -22.5h-256v-803q0 -39 -26.5 -65.5 t-66.5 -26.5t-66.5 26.5t-26.5 65.5v803h-121q-35 0 -57.5 22.5t-22.5 57.5z" /> +<glyph unicode="g" horiz-adv-x="1292" d="M98 532q0 252 162 402q139 131 339 131t345 -156v52q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-916q0 -260 -124.5 -398.5t-356.5 -138.5q-246 0 -438 107q-37 23 -37 62.5t23.5 66.5t49 27t46.5 -9q154 -77 333 -77h5q313 0 313 333v138q-145 -156 -350 -156 q-195 0 -334 131q-162 150 -162 401zM285 532q0 -264 211 -339q63 -23 153 -23q150 0 295 152v421q-57 59 -131 105.5t-164 46.5t-153.5 -22.5t-110.5 -65.5q-100 -94 -100 -275z" /> +<glyph unicode="h" horiz-adv-x="1247" d="M162 82v1329q0 41 26.5 67.5t65.5 26.5t66.5 -26.5t27.5 -67.5v-534q82 86 141 120q117 68 222.5 68t173 -32t114.5 -87q96 -113 97 -282v-582q0 -39 -28 -65.5t-67 -26.5t-65.5 26.5t-26.5 65.5v561q0 117 -52 183.5t-173 66.5q-180 0 -336 -197v-614q0 -39 -27.5 -65.5 t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="i" horiz-adv-x="526" d="M154 1362v8q0 43 30.5 74t73.5 31h12q43 0 74 -31t31 -74v-8q0 -43 -31 -74t-74 -31h-12q-43 0 -73.5 31t-30.5 74zM170 82v879q0 40 26.5 67t66.5 27t66.5 -27t26.5 -67v-879q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5z" /> +<glyph unicode="j" horiz-adv-x="526" d="M-94 -399q0 31 21.5 54t56.5 23l61 -6q63 0 84 17q41 27 41 104v1165q0 41 26.5 68t66.5 27t66.5 -27t26.5 -68v-1169q0 -199 -143 -260q-51 -20 -125 -21q-74 0 -128 17.5t-54 75.5zM154 1362v8q0 43 30.5 74t73.5 31h12q43 0 74 -31t31 -74v-8q0 -43 -31 -74t-74 -31 h-12q-43 0 -73.5 31t-30.5 74z" /> +<glyph unicode="k" horiz-adv-x="1118" d="M162 82v1329q0 39 26.5 66.5t65.5 27.5t66.5 -27.5t27.5 -66.5v-838l488 451q33 27 73.5 27t59 -30t18.5 -50q0 -45 -35 -80l-295 -264l371 -492q21 -28 21 -63q0 -34 -27 -58t-59 -24q-49 0 -84 39l-353 479l-178 -162v-264q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5 t-26.5 65.5z" /> +<glyph unicode="l" horiz-adv-x="542" d="M178 82v1329q0 41 26.5 67.5t66.5 26.5t67 -26.5t27 -67.5v-1329q0 -39 -27 -65.5t-67 -26.5t-66.5 26.5t-26.5 65.5z" /> +<glyph unicode="m" horiz-adv-x="1882" d="M162 82v879q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-84q125 188 348 188q111 0 201 -66q74 -51 113 -145q57 90 112 127q117 84 264 84q166 0 261 -127q82 -109 82 -266v-590q0 -39 -28 -65.5t-67 -26.5t-65.5 26.5t-26.5 65.5v553q0 129 -46 193.5t-163 64.5 q-180 0 -295 -197v-614q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v553q0 129 -46 193.5t-163 64.5q-180 0 -295 -197v-614q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="n" horiz-adv-x="1247" d="M162 82v879q0 41 26.5 67.5t65.5 26.5t66.5 -27t27.5 -67v-84q82 86 141 120q117 68 222.5 68t173 -32t114.5 -87q96 -113 97 -282v-582q0 -39 -28 -65.5t-67 -26.5t-65.5 26.5t-26.5 65.5v561q0 117 -52 183.5t-173 66.5q-180 0 -336 -197v-614q0 -39 -27.5 -65.5 t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="o" horiz-adv-x="1245" d="M98 522q0 244 144 393q141 150 381 150q238 0 381 -150q143 -152 143 -393q0 -242 -143 -393q-142 -149 -378 -149h-3q-240 0 -381 149q-143 150 -144 393zM316 350q30 -72 78 -116t108.5 -64t119 -20t119 20t109.5 63q111 100 111 291q0 184 -111 287q-92 84 -227 84 q-221 0 -308 -199q-31 -71 -31 -170q1 -103 32 -176z" /> +<glyph unicode="p" horiz-adv-x="1292" d="M162 -387v1350q0 39 26.5 65.5t66.5 26.5t66.5 -27t26.5 -65v-54q152 156 350.5 156t339.5 -141q156 -156 156 -402q0 -250 -156 -403q-143 -139 -340.5 -139t-349.5 155v-522q0 -41 -26.5 -67.5t-66.5 -26.5t-66.5 26.5t-26.5 67.5zM348 307q138 -153 322 -153h2 q233 0 311 208q25 70 25 160q0 176 -95 277q-90 92 -241 92q-184 0 -324 -154v-430z" /> +<glyph unicode="q" horiz-adv-x="1292" d="M98 522q0 246 156 402q141 141 340 141t350 -156v54q0 39 26.5 65.5t66.5 26.5t66.5 -27t26.5 -65v-1350q0 -41 -26.5 -67.5t-66.5 -26.5t-66.5 26.5t-26.5 67.5v522q-151 -155 -347 -155h-3q-197 0 -340 139q-156 154 -156 403zM285 522q0 -176 96 -276q88 -92 240 -92 q184 0 323 153v430q-139 154 -323 154q-233 0 -310 -209q-26 -68 -26 -154v-6z" /> +<glyph unicode="r" horiz-adv-x="792" d="M162 82v879q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-89q143 193 322 193h10q39 0 64.5 -26.5t25.5 -66.5t-26.5 -63.5t-67.5 -23.5h-10q-102 0 -183.5 -50.5t-134.5 -129.5v-623q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="s" horiz-adv-x="983" d="M98 133.5q0 36.5 22.5 62t49.5 25.5t63 -16q120 -53 261 -53q227 0 227 145q0 45 -45 68.5t-113.5 42t-148.5 38t-148.5 54.5t-114 91t-45.5 138t25 141.5t74 102.5q109 92 301 92q154 0 297 -51q29 -10 44 -33t15 -50.5t-23.5 -52t-46 -24.5t-55.5 10q-98 31 -214.5 31 t-177 -41t-60.5 -98.5t46 -85t113.5 -46t148.5 -37t148 -50.5q160 -82 160 -254q0 -131 -98 -213q-106 -90 -297 -90q-207 0 -373 92q-35 25 -35 61.5z" /> +<glyph unicode="t" horiz-adv-x="786" d="M45 924q0 18 18 34l279 273q18 18 34.5 18t28 -12t11.5 -29v-164h231q35 0 57.5 -22.5t22.5 -56.5q0 -35 -22.5 -57.5t-57.5 -22.5h-231v-619q0 -78 47 -106q27 -16 81 -16q3 0 5 -1q51 -1 73 9q24 10 51 10t49.5 -20.5t22.5 -61.5t-40 -60q-87 -41 -149 -41l-2 1 q-62 0 -113.5 6t-98.5 34q-113 66 -113 230v635h-145q-39 0 -39 39z" /> +<glyph unicode="u" horiz-adv-x="1249" d="M154 381v582q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-562q0 -117 52 -183t173 -66q180 0 336 196v615q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-879q0 -41 -26.5 -67.5t-65.5 -26.5t-66.5 26.5t-27.5 67.5v84q-82 -86 -141 -121q-116 -68 -221 -68l-1 1 q-106 0 -173.5 31.5t-114.5 86.5q-96 113 -96 283z" /> +<glyph unicode="v" horiz-adv-x="1085" d="M53 971q0 28 26.5 56t59.5 28q66 0 90 -54l314 -794l313 794q25 53 90 54q33 0 59.5 -28t26.5 -52q0 -33 -10 -57l-356 -852q-14 -31 -44 -53.5t-69 -22.5h-21q-39 0 -68.5 22.5t-43.5 53.5l-357 852q-10 25 -10 53z" /> +<glyph unicode="w" horiz-adv-x="1607" d="M51 973.5q0 27.5 26.5 54.5t61.5 27q72 0 88 -56l240 -788l238 770q10 33 37.5 53.5t62.5 20.5t62.5 -20.5t37.5 -53.5l238 -770l239 788q16 55 88 56q35 0 62 -27t27 -54.5t-7 -45.5l-290 -852q-12 -35 -45 -60.5t-74 -25.5t-74 25.5t-47 62.5l-217 678l-217 -678 q-14 -37 -47 -62.5t-74 -25.5t-74 25.5t-45 60.5l-291 852q-6 18 -6 45.5z" /> +<glyph unicode="x" horiz-adv-x="1110" d="M104 969q0 37 27 61.5t71 24.5t68 -35l287 -354l285 354q25 35 68.5 35t70.5 -25.5t27 -59.5t-21 -61l-323 -381l319 -385q23 -27 23 -60.5t-24 -63t-70 -29.5t-72 37l-291 348l-275 -344q-31 -41 -75.5 -41t-68.5 25.5t-24 62.5t21 63l317 375l-317 387q-23 29 -23 66z " /> +<glyph unicode="y" horiz-adv-x="1091" d="M49 970.5q0 28.5 26.5 56.5t59.5 28q68 0 92 -58l316 -782l321 778q27 61 86 62q39 0 65.5 -28t26.5 -57.5t-6 -43.5l-559 -1344q-27 -63 -86 -63q-37 0 -62.5 26.5t-25.5 53t6 43.5l133 342l-385 938q-8 20 -8 48.5z" /> +<glyph unicode="z" horiz-adv-x="1021" d="M80 105.5q0 50.5 33 87.5l589 677h-518q-37 0 -61.5 25t-24.5 61q0 37 24.5 62.5t61.5 25.5h621q53 0 86 -31.5t33 -81.5t-29 -85l-573 -672h526q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-639q-53 0 -91 27.5t-38 78z" /> +<glyph unicode="{" horiz-adv-x="704" d="M6 629q0 70 68.5 82t106.5 29.5t57 37.5q27 33 26 99v432q0 201 174 235q51 10 113 10h24q29 0 50.5 -21.5t21.5 -49.5q0 -29 -21.5 -50.5t-50.5 -21.5h-30q-111 0 -119 -59q-2 -14 -2 -27v-455q0 -173 -184 -241q184 -68 184 -242v-455q0 -39 14 -53q29 -33 107 -33h30 q29 0 50.5 -21.5t21.5 -49.5q0 -29 -21.5 -50.5t-50.5 -21.5h-24q-137 0 -205 47q-82 59 -82 199v432q0 66 -22 92q-43 51 -166 74q-70 12 -70 82z" /> +<glyph unicode="|" horiz-adv-x="518" d="M176 -319v1753q0 35 23.5 59.5t58.5 24.5t59.5 -25t24.5 -59v-1753q0 -35 -24.5 -58.5t-59.5 -23.5t-58.5 23.5t-23.5 58.5z" /> +<glyph unicode="}" horiz-adv-x="704" d="M57 -225q0 29 21.5 50t50.5 21h31q111 0 119 60q2 14 2 26v455q0 174 184 242q-184 68 -184 241v455q0 39 -15 53q-29 33 -106 33h-31q-29 0 -50.5 21.5t-21.5 50.5t21.5 50t50.5 21h25q137 0 204 -47q82 -59 82 -198v-432q0 -66 23 -93q43 -51 166 -73q70 -12 69 -82 q0 -70 -68.5 -82t-106.5 -29.5t-56 -38.5q-27 -33 -27 -98v-432q0 -201 -174 -236q-51 -10 -112 -10h-25q-29 0 -50.5 21.5t-21.5 50.5z" /> +<glyph unicode="~" horiz-adv-x="1306" d="M152 494.5q0 35.5 20.5 84t56.5 85.5q82 88 173.5 88t160 -25t129 -53.5t115.5 -53t102 -24.5t68.5 9t36 24.5t24 38t24.5 52.5t44 30q57 0 57 -48q0 -8 -2 -16q-25 -135 -95.5 -199.5t-158.5 -64.5t-155.5 24.5t-128 53t-115.5 53.5t-115 25q-106 0 -139 -111 q-10 -39 -41 -39t-46 15.5t-15 51z" /> +<glyph unicode="¡" horiz-adv-x="530" d="M148 930.5q0 -50.5 36 -86.5t86 -36t86 36t36 86.5t-36 86t-86 35.5t-86 -35.5t-36 -86zM162 -86v-203q0 -45 31 -76t76 -31t74.5 31t29.5 76v203l-37 675q-4 60 -67 60q-66 0 -70 -60z" /> +<glyph unicode="¢" horiz-adv-x="1128" d="M90 522q0 248 164 400q76 69 175 106t182 37t132 -8l60 174q14 39 48 39t49 -18.5t15 -34t-4 -27.5l-55 -164q63 -23 115 -59q41 -27 41 -64t-22.5 -63.5t-45.5 -26.5q-35 0 -55 12l-88 41l-242 -704q39 -8 106.5 -8t119 18t83.5 37q43 23 71 22.5t50.5 -27t22.5 -63.5 t-47 -67q-145 -94 -328 -94q-66 0 -135 16l-72 -211q-12 -37 -46 -37t-50.5 17.5t-16.5 31.5q0 23 7 35l67 199q-133 59 -217 184t-84 307zM276 522q0 -229 175 -321l235 688q-8 2 -16 2h-17q-180 0 -278.5 -101.5t-98.5 -267.5z" /> +<glyph unicode="£" horiz-adv-x="1236" d="M80 674q0 20 12 33.5t33 13.5h197q-23 70 -44.5 142.5t-21.5 168.5t36 174t101 133q137 111 361 111q154 0 295 -59q61 -25 61 -82q0 -35 -23.5 -60.5t-48.5 -25.5q-37 0 -71 12q-98 35 -199.5 35t-163 -20.5t-96.5 -53.5q-66 -61 -66 -150.5t25 -167t47 -157.5h363 q20 0 33.5 -13.5t13.5 -33.5t-13.5 -32.5t-33.5 -12.5h-342q8 -41 8 -94q0 -158 -86 -293l51 2q78 0 166 -29t135 -42t92 -13q72 0 107 12q55 18 77.5 18t47 -23.5t24.5 -64.5q0 -70 -149 -108q-55 -14 -118 -14t-110 14t-92 31q-115 47 -192 47q-127 0 -232 -70 q-23 -16 -50.5 -16t-50 21.5t-22.5 55t31 61.5t64.5 71t60.5 96q61 119 61 231q0 53 -12 107h-221q-45 0 -45 45z" /> +<glyph unicode="¤" horiz-adv-x="1368" d="M135 242q0 31 23 53l133 133q-92 131 -92 287t92 286l-133 134q-23 23 -23 53q0 31 20.5 53.5t45.5 22.5q37 0 63 -23l135 -133q127 92 285 92t285 -92l135 133q27 23 57.5 23t51 -22.5t20.5 -53.5t-23 -53l-133 -134q92 -131 92 -286q0 -156 -92 -287l133 -133 q23 -23 23 -53q0 -31 -20.5 -53.5t-45.5 -22.5q-37 0 -63 22l-135 134q-127 -93 -285 -93t-285 93l-135 -134q-27 -23 -57.5 -22.5t-51 23t-20.5 53.5zM365 715q0 -131 94 -225.5t225 -94.5t225.5 94.5t94.5 225.5t-94.5 225t-225.5 94t-225 -94t-94 -225z" /> +<glyph unicode="¥" horiz-adv-x="1347" d="M133.5 1370.5q-0.5 34.5 28 61t66.5 26.5t57.5 -16.5t33.5 -40.5l355 -621l354 621q33 57 81 57t76.5 -26.5t28.5 -61.5t-16 -61l-344 -561h201q33 0 54 -23t21 -55q0 -33 -20 -54.5t-55 -21.5h-289v-186h289q33 0 54 -23t21 -55q0 -33 -20 -54.5t-55 -21.5h-289v-174 q0 -39 -27.5 -65.5t-64.5 -26.5t-64.5 26.5t-27.5 65.5v174h-289q-35 0 -55.5 21.5t-20.5 54.5t21.5 55.5t54.5 22.5h289v186h-289q-35 0 -55.5 21.5t-20.5 54.5t21.5 55.5t54.5 22.5h201l-344 561q-16 27 -16.5 61.5z" /> +<glyph unicode="§" horiz-adv-x="1083" d="M96 -57.5q0 41.5 22.5 65t45.5 23.5q25 0 55 -13q115 -57 285 -57q231 0 231 143q0 49 -46 83t-114.5 63t-148.5 58.5t-147 72.5q-162 98 -162 260q0 152 125 223q36 23 75 35q-131 94 -131 248q0 131 101 213q104 90 285.5 90t316.5 -55q55 -25 55 -80 q0 -33 -25.5 -57.5t-50 -24.5t-57.5 12q-84 33 -217 33q-231 0 -232 -143q0 -51 46.5 -84t115 -61.5t148.5 -58.5t147 -73q162 -100 162 -260q0 -152 -127 -225q-37 -23 -76 -35q133 -92 133 -246q0 -131 -100 -215q-104 -88 -295 -88q-240 0 -387 92q-33 20 -33 61.5z M289 653q0 -88 119 -147q53 -27 117.5 -50.5t129.5 -49.5q154 39 154 180q0 86 -121 147q-51 27 -118 49.5t-130 51.5q-152 -39 -151 -181z" /> +<glyph unicode="¨" horiz-adv-x="819" d="M129 1282q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM475 1282q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="©" horiz-adv-x="1677" d="M104 715q0 152 57.5 285t158 233t234.5 157.5t286 57.5t286 -57.5t233 -157.5t157.5 -233.5t58.5 -284.5q0 -152 -58.5 -285t-157.5 -233.5t-233 -157.5t-286 -57t-286 57t-234.5 157.5t-158 233.5t-57.5 285zM211 715q0 -258 184.5 -442.5t442.5 -184.5q262 0 446 184.5 t184 442.5t-184 442t-444 184q-131 0 -245 -49t-200 -135q-184 -184 -184 -442zM457 715q0 188 109.5 301.5t285.5 113.5q123 0 210 -57t136 -158q6 -12 6 -33.5t-18.5 -40t-41 -18.5t-37.5 8.5t-41 52.5t-79 83t-127 39t-122 -24t-79 -64q-66 -80 -65 -203q0 -123 65 -203 q68 -88 193 -88q143 0 223 137q27 45 59.5 45t51 -18.5t18.5 -40t-6 -33.5q-49 -100 -136 -157.5t-192.5 -57.5t-178.5 29.5t-126 85.5q-109 113 -108 301z" /> +<glyph unicode="ª" horiz-adv-x="993" d="M135 526q0 23 17.5 40.5t40.5 17.5h579q23 0 40 -17.5t17 -40.5t-17 -40t-40 -17h-579q-23 0 -40.5 17.5t-17.5 39.5zM166 914.5q0 101.5 81 160t249 58.5h155v4q0 94 -44 134t-115 40q-113 0 -201 -33q-12 -4 -30.5 -4t-37 19.5t-18.5 41.5q0 47 49 66q125 49 224.5 49 t155.5 -24.5t93 -65.5q72 -76 72 -195v-391q0 -31 -21.5 -52.5t-52.5 -21.5t-52.5 21.5t-21.5 52.5v19q-88 -98 -248 -99q-96 0 -165 60q-72 59 -72 160.5zM313 926q0 -41 30 -70t99 -29q123 0 209 97v98h-139q-199 0 -199 -96z" /> +<glyph unicode="«" horiz-adv-x="1198" d="M111 522q0 51 36 88l336 371q18 23 55 23t60 -23t23 -56.5t-19 -54.5l-328 -348l328 -348q18 -23 18.5 -55.5t-22.5 -55t-59.5 -22.5t-55.5 22l-336 371q-37 37 -36 88zM537 522q0 51 36 88l336 371q18 23 55 23t60 -23t23 -56.5t-19 -54.5l-328 -348l328 -348 q18 -23 18.5 -55.5t-22.5 -55t-59.5 -22.5t-55.5 22l-336 371q-37 37 -36 88z" /> +<glyph unicode="¬" horiz-adv-x="1185" d="M150 711q0 31 21.5 52t51.5 21h707q35 0 60.5 -25.5t25.5 -60.5v-278q0 -33 -22.5 -54.5t-55.5 -21.5t-54.5 21.5t-21.5 54.5v217h-639q-31 0 -52 21.5t-21 52.5z" /> +<glyph unicode="­" horiz-adv-x="835" d="M141 573q0 35 23.5 59.5t58.5 24.5h387q35 0 59.5 -24.5t24.5 -59.5t-24.5 -58t-59.5 -23h-387q-35 0 -58.5 23.5t-23.5 57.5z" /> +<glyph unicode="®" horiz-adv-x="1677" d="M104 715q0 152 57.5 286t158 233t234.5 157.5t286 58.5t286 -58.5t233 -157.5t157.5 -233.5t58.5 -285.5q0 -152 -58.5 -286t-157.5 -234.5t-233.5 -157.5t-285.5 -57q-152 0 -286 57t-234.5 157.5t-158 234.5t-57.5 286zM211 717q0 -262 184.5 -446.5t444.5 -184.5 q129 0 243.5 49t200.5 135q184 184 184 447q0 258 -184 442t-446 184q-258 0 -442.5 -184t-184.5 -442zM535 365v663q0 39 26.5 66.5t65.5 27.5h245q168 0 245 -70.5t77 -161.5t-46 -140.5t-106 -71.5q49 -16 95.5 -75.5t46.5 -180.5v-55q0 -29 -20.5 -49.5t-49.5 -20.5 t-49.5 20.5t-20.5 49.5v36q0 88 -16 127q-37 82 -133 82h-223v-247q0 -29 -20.5 -48.5t-49.5 -19.5t-48 19.5t-19 48.5zM672 733h194q86 0 139.5 35t53.5 99.5t-42 100.5t-155 36h-190v-271z" /> +<glyph unicode="¯" horiz-adv-x="638" d="M16 1266q0 27 17.5 44t44.5 17h479q27 0 44 -17.5t17 -43.5q0 -27 -17 -44.5t-44 -17.5h-479q-27 0 -44.5 17.5t-17.5 44.5z" /> +<glyph unicode="°" horiz-adv-x="774" d="M106 1169q0 113 82 199q80 82 199 82q117 0 199 -82t82 -199q0 -119 -82 -198q-86 -82 -199 -82q-115 0 -198 83t-83 197zM213 1169q0 -72 51 -123t123 -51t123 51.5t51 122.5q0 72 -51 123t-123 51t-123 -51t-51 -123z" /> +<glyph unicode="±" horiz-adv-x="1241" d="M127 78q0 35 21.5 57.5t56.5 22.5h829q35 0 57.5 -22.5t22.5 -57.5t-22.5 -56.5t-57.5 -21.5h-829q-35 0 -56.5 21.5t-21.5 56.5zM127 778q0 35 21.5 57.5t56.5 22.5h336v324q0 35 22.5 57.5t57.5 22.5t57 -22.5t22 -57.5v-324h334q35 0 57.5 -22.5t22.5 -57.5 t-22.5 -56.5t-57.5 -21.5h-334v-323q0 -35 -22.5 -57.5t-56.5 -22.5q-35 0 -57.5 22.5t-22.5 57.5v323h-336q-35 0 -56.5 21.5t-21.5 56.5z" /> +<glyph unicode="²" horiz-adv-x="757" d="M78 1019q0 44 33.5 91t84 87t110 77t109.5 71.5t83.5 70.5t33.5 82t-35.5 82t-111.5 36q-121 0 -207 -45q-12 -6 -31.5 -6t-36 15t-16.5 46t37 53q104 61 241.5 61.5t213.5 -68t76 -171.5q0 -141 -195 -272q-51 -37 -100 -70q-121 -78 -148 -115h389q27 0 44.5 -17 t17.5 -44t-17.5 -43t-44.5 -16h-450q-35 0 -57.5 25.5t-22.5 69.5z" /> +<glyph unicode="³" horiz-adv-x="757" d="M74 1012.5q0 29.5 18.5 47t32.5 17.5q18 0 41 -8q104 -31 176 -31q188 0 188 107q0 127 -229 127h-22q-27 0 -44.5 17.5t-17.5 43.5q0 27 17.5 44.5t44.5 17.5h10q215 0 215 118q0 78 -105 97q-29 6 -71 6q-82 0 -160 -39q-12 -6 -30.5 -6t-36 15.5t-17.5 44t43 52.5 q111 57 243 57.5t196.5 -63t64.5 -149.5t-42 -129t-85 -60q156 -47 155 -198q0 -156 -159 -211q-57 -18 -140 -19q-160 0 -251 52q-35 20 -35 49.5z" /> +<glyph unicode="´" horiz-adv-x="491" d="M98 1210q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="µ" horiz-adv-x="1236" d="M172 -354v1317q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-562q0 -117 52.5 -183t173.5 -66q180 0 336 196v615q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-879q0 -41 -26.5 -67.5t-65.5 -26.5t-66.5 26.5t-27.5 67.5v84q-86 -92 -142 -123q-109 -66 -221.5 -65.5 t-198.5 55.5v-389q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="¶" horiz-adv-x="1499" d="M80 903q0 219 153.5 373t372.5 154h721q35 0 58.5 -24t23.5 -58q0 -35 -23.5 -57.5t-58.5 -22.5h-94v-1645q0 -35 -23.5 -58.5t-58.5 -23.5t-57.5 23.5t-22.5 58.5v1645h-229v-1645q0 -35 -23.5 -58.5t-58.5 -23.5t-57.5 23.5t-22.5 58.5v754h-74q-219 0 -372.5 153.5 t-153.5 372.5z" /> +<glyph unicode="·" horiz-adv-x="532" d="M141 578v12q0 47 34 81t81 34h20q48 0 81.5 -34t33.5 -81v-12q0 -47 -33.5 -81t-81.5 -34h-20q-47 0 -81 33.5t-34 81.5z" /> +<glyph unicode="¸" horiz-adv-x="628" d="M92 -365q0 41 39 41q8 0 21 -6q63 -35 120 -35q117 0 117 95q0 31 -21.5 47t-48.5 16q-49 0 -73 -12q-33 -16 -44.5 -16.5t-22.5 9t-11 25t8 27.5l131 209h86l-94 -164q33 8 86 8t97 -39t44 -104q0 -188 -227 -189q-98 0 -184 54q-23 10 -23 34z" /> +<glyph unicode="¹" horiz-adv-x="757" d="M160 1600.5q0 31.5 39 52.5l147 76q20 10 51 10t54.5 -25.5t23.5 -62.5v-607h103q26 0 43.5 -17t17.5 -44t-17.5 -43t-43.5 -16h-357q-27 0 -43 16t-16 43t16.5 44t42.5 17h123v543l-92 -45q-16 -8 -35.5 -8t-38 17.5t-18.5 49z" /> +<glyph unicode="º" horiz-adv-x="1052" d="M143 526q0 23 17.5 40.5t40.5 17.5h651q23 0 40 -17.5t17 -40.5t-17.5 -40t-39.5 -17h-651q-23 0 -40.5 17.5t-17.5 39.5zM162 1073q0 170 100 273q100 104 262 104q84 0 151.5 -27.5t115.5 -76.5q100 -102 100 -273q0 -170 -100 -274t-264.5 -104.5t-264.5 104.5 q-100 104 -100 274zM309 1075q0 -125 72 -192q57 -58 145 -58q137 0 197 136q20 47 20 114q0 121 -71 191q-57 55 -146 55q-86 0 -145 -55q-72 -68 -72 -191z" /> +<glyph unicode="»" horiz-adv-x="1198" d="M152 119q0 33 18 55l328 348l-328 348q-18 20 -18 54t22.5 57t59 23t55.5 -23l336 -371q37 -37 37 -88t-37 -88l-336 -371q-18 -23 -55 -22.5t-59.5 23t-22.5 55.5zM578 119q0 33 18 55l328 348l-328 348q-18 20 -18 54t22.5 57t59 23t55.5 -23l336 -371q37 -37 36 -88 q0 -51 -36 -88l-336 -371q-18 -23 -55 -22.5t-59.5 23t-22.5 55.5z" /> +<glyph unicode="¼" horiz-adv-x="1925" d="M174 1311.5q0 31.5 39 52.5l147 76q20 10 51 10t54.5 -25.5t23.5 -62.5v-606h103q27 0 44 -17.5t17 -44.5t-17.5 -43t-43.5 -16h-356q-27 0 -43.5 16.5t-16.5 42.5q0 27 16.5 44.5t43.5 17.5h122v542l-92 -45q-16 -8 -35.5 -8t-38 17.5t-18.5 49zM467 13.5 q0 23.5 10 43.5l848 1397q18 29 52 29t54.5 -19.5t20.5 -43t-10 -44.5l-848 -1396q-18 -29 -52 -29t-54.5 19.5t-20.5 43zM1104 280.5q0 32.5 22 61.5l338 426q37 43 74 43h16q37 0 61.5 -25.5t24.5 -60.5v-408h74q27 0 44.5 -17t17.5 -44t-17.5 -43t-44.5 -16h-74v-142 q0 -29 -18 -47t-47 -18t-47.5 18.5t-18.5 46.5v142h-319q-35 0 -60.5 25.5t-25.5 58zM1249 317h260v332z" /> +<glyph unicode="½" horiz-adv-x="1925" d="M162 1311.5q0 31.5 39 52.5l147 76q20 10 51 10t54.5 -25.5t23.5 -62.5v-606h103q27 0 44 -17.5t17 -44.5t-17.5 -43t-43.5 -16h-357q-27 0 -43 16.5t-16 42.5q0 27 16.5 44.5t42.5 17.5h123v542l-92 -45q-16 -8 -35.5 -8t-38 17.5t-18.5 49zM455 13.5q0 23.5 10 43.5 l848 1397q18 29 52 29t54.5 -19.5t20.5 -43t-10 -44.5l-848 -1396q-18 -29 -52 -29t-54.5 19.5t-20.5 43zM1180 95q0 44 33.5 91t84 87t109.5 77t109.5 72t84 70.5t33.5 82t-35.5 82t-111.5 35.5q-121 0 -207 -45q-12 -6 -31.5 -6t-36 15.5t-16.5 46t37 53.5 q104 61 241.5 61t213 -68.5t75.5 -170.5q0 -141 -194 -275q-51 -35 -101 -65q-121 -80 -147 -117h389q27 0 44.5 -17.5t17.5 -44.5t-17.5 -43t-44.5 -16h-450q-35 0 -57.5 25.5t-22.5 69.5z" /> +<glyph unicode="¾" horiz-adv-x="1925" d="M129 724q0 30 18.5 47t32.5 17q18 0 41 -6q104 -33 176 -32q188 0 189 106q0 127 -230 127h-22q-27 0 -44.5 17.5t-17.5 43.5q0 27 17.5 44.5t44.5 17.5h10q215 0 215 119q0 78 -104 98q-29 4 -70 4q-84 0 -162 -39q-12 -6 -30.5 -6t-36 15.5t-17.5 44t45 51.5 q109 59 241 59t196.5 -63.5t64.5 -149.5t-42 -129t-85 -59q156 -47 156 -199q0 -156 -160 -209q-57 -20 -139 -20q-160 0 -252 51q-35 20 -35 50zM496 13.5q0 23.5 10 43.5l848 1397q18 29 52 29t54.5 -19.5t20.5 -43t-11 -44.5l-847 -1396q-18 -29 -52 -29t-54.5 19.5 t-20.5 43zM1133 280.5q0 32.5 22 61.5l338 426q37 43 74 43h16q37 0 61.5 -25.5t24.5 -60.5v-408h74q27 0 44 -17t17 -44t-17.5 -43t-43.5 -16h-74v-142q0 -29 -18.5 -47t-46.5 -18q-29 0 -47.5 18.5t-18.5 46.5v142h-319q-35 0 -60.5 25.5t-25.5 58zM1278 317h260v332z" /> +<glyph unicode="¿" horiz-adv-x="999" d="M82 -19q0 184 193 326q113 84 162 164q29 47 28.5 97t27.5 72.5t64.5 22.5t62.5 -23.5t26 -56.5q0 -203 -191 -350q-123 -98 -155.5 -144.5t-32.5 -97.5q0 -223 292 -223q160 0 263 68q27 16 56.5 16t53 -23.5t23.5 -54.5q0 -51 -51 -82q-160 -98 -361 -98 q-211 0 -334 104q-127 106 -127 283zM437 930.5q0 50.5 35.5 86t86 35.5t86 -35.5t35.5 -86t-35.5 -86.5t-86 -36t-86 36t-35.5 86.5z" /> +<glyph unicode="À" horiz-adv-x="1427" d="M53 70.5q0 27.5 10 52.5l523 1233q37 84 119 84h20q82 0 119 -84l522 -1233q10 -25 10 -52.5t-24.5 -54t-77.5 -26.5t-78 57l-133 320h-696l-134 -320q-25 -57 -78 -57t-77.5 26.5t-24.5 54zM438 537h553l-276 665zM526 1755q0 76 82 76q41 0 62 -39l104 -185 q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51z" /> +<glyph unicode="Á" horiz-adv-x="1427" d="M53 70.5q0 27.5 10 52.5l523 1233q37 84 119 84h20q82 0 119 -84l522 -1233q10 -25 10 -52.5t-24.5 -54t-77.5 -26.5t-78 57l-133 320h-696l-134 -320q-25 -57 -78 -57t-77.5 26.5t-24.5 54zM438 537h553l-276 665zM639 1562q0 31 15 45l104 185q20 39 62 39q82 0 81 -76 q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="Â" horiz-adv-x="1427" d="M53 70.5q0 27.5 10 52.5l523 1233q37 84 119 84h20q82 0 119 -84l522 -1233q10 -25 10 -52.5t-24.5 -54t-77.5 -26.5t-78 57l-133 320h-696l-134 -320q-25 -57 -78 -57t-77.5 26.5t-24.5 54zM438 537h553l-276 665zM438 1559.5v23.5t17 29l139 143q41 41 82 41h78 q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30z" /> +<glyph unicode="Ã" horiz-adv-x="1427" d="M53 70.5q0 27.5 10 52.5l523 1233q37 84 119 84h20q82 0 119 -84l522 -1233q10 -25 10 -52.5t-24.5 -54t-77.5 -26.5t-78 57l-133 320h-696l-134 -320q-25 -57 -78 -57t-77.5 26.5t-24.5 54zM387 1573.5q0 25.5 12 59.5t35 62q47 68 125 68q45 0 84 -15.5t76.5 -32.5 t75.5 -32.5t75 -15.5t53.5 14t24.5 35q18 49 53 49q43 0 47 -45q0 -72 -47 -131q-53 -63 -125 -63q-61 0 -131 33.5t-107.5 49t-72.5 15.5q-55 0 -84 -66q-10 -37 -47 -37q-18 0 -32.5 13.5t-14.5 39zM438 537h553l-276 665z" /> +<glyph unicode="Ä" horiz-adv-x="1427" d="M53 70.5q0 27.5 10 52.5l523 1233q37 84 119 84h20q82 0 119 -84l522 -1233q10 -25 10 -52.5t-24.5 -54t-77.5 -26.5t-78 57l-133 320h-696l-134 -320q-25 -57 -78 -57t-77.5 26.5t-24.5 54zM438 537h553l-276 665zM438 1634q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5 t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM784 1634q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="Å" horiz-adv-x="1427" d="M53 70.5q0 27.5 10 52.5l523 1233q37 84 119 84h20q82 0 119 -84l522 -1233q10 -25 10 -52.5t-24.5 -54t-77.5 -26.5t-78 57l-133 320h-696l-134 -320q-25 -57 -78 -57t-77.5 26.5t-24.5 54zM438 537h553l-276 665zM522 1688q0 80 56.5 136t134.5 56q41 0 76.5 -15 t62.5 -40q55 -57 55 -137t-56.5 -136.5t-136 -56.5t-136 56.5t-56.5 136.5zM614 1688q0 -41 30 -70.5t71 -29.5t70.5 29.5t29.5 70.5t-29.5 70.5t-70.5 29.5t-71 -29.5t-30 -70.5z" /> +<glyph unicode="Æ" horiz-adv-x="2129" d="M4 70q0 41 21 69l817 1239q37 51 94 52h999q37 0 62.5 -26t25.5 -63t-25.5 -61.5t-62.5 -24.5h-727v-452h654q37 0 62.5 -25.5t25.5 -62.5t-26 -61.5t-62 -24.5h-654v-455h727q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-821q-39 0 -65.5 26.5t-26.5 65.5v275 h-631l-209 -324q-35 -53 -80 -53t-71.5 26.5t-26.5 53.5zM502 537h520v718h-51z" /> +<glyph unicode="Ç" horiz-adv-x="1429" d="M115 715q0 338 204 538q199 197 512 197q152 0 261.5 -37t168 -68.5t70.5 -51t12 -49.5t-21.5 -53.5t-51 -23.5t-45.5 9q-82 43 -168 69.5t-214 26.5t-231.5 -43t-173.5 -119q-137 -150 -137 -395q0 -246 137 -396q150 -162 412 -161q121 0 207 26.5t135 52t78.5 25.5 t51 -23.5t21.5 -54.5q0 -55 -45 -78q-94 -53 -201.5 -88.5t-254.5 -37.5l-62 -109q33 8 86.5 8t97.5 -39t44 -104q0 -188 -228 -189q-98 0 -184 54q-23 10 -23 34q0 41 39 41q8 0 21 -6q64 -35 121 -35q117 0 116 95q0 31 -21.5 47t-47.5 16q-49 0 -74 -12 q-33 -16 -44 -16.5t-22.5 9t-11.5 25t8 27.5l99 158q-287 25 -461 217q-180 201 -180 514z" /> +<glyph unicode="È" horiz-adv-x="1306" d="M199 92v1243q0 39 26.5 67t65.5 28h821q37 0 62.5 -26t25.5 -63t-25.5 -61.5t-62.5 -24.5h-727v-452h653q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-653v-455h727q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-821q-39 0 -65.5 26.5t-26.5 65.5z M516 1755q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51z" /> +<glyph unicode="É" horiz-adv-x="1306" d="M199 92v1243q0 39 26.5 67t65.5 28h821q37 0 62.5 -26t25.5 -63t-25.5 -61.5t-62.5 -24.5h-727v-452h653q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-653v-455h727q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-821q-39 0 -65.5 26.5t-26.5 65.5z M618 1562q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="Ê" horiz-adv-x="1306" d="M199 92v1243q0 39 26.5 67t65.5 28h821q37 0 62.5 -26t25.5 -63t-25.5 -61.5t-62.5 -24.5h-727v-452h653q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-653v-455h727q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-821q-39 0 -65.5 26.5t-26.5 65.5z M438 1559.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30z" /> +<glyph unicode="Ë" horiz-adv-x="1306" d="M199 92v1243q0 39 26.5 67t65.5 28h821q37 0 62.5 -26t25.5 -63t-25.5 -61.5t-62.5 -24.5h-727v-452h653q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-653v-455h727q37 0 62.5 -25.5t25.5 -62.5t-25.5 -61.5t-62.5 -24.5h-821q-39 0 -65.5 26.5t-26.5 65.5z M416 1634q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM762 1634q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="Ì" horiz-adv-x="583" d="M116 1755q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51zM199 82v1264q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-1264q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="Í" horiz-adv-x="583" d="M199 82v1264q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-1264q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5zM207 1562q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="Î" horiz-adv-x="583" d="M16 1559.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30zM199 82v1264q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-1264q0 -39 -27.5 -65.5 t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="Ï" horiz-adv-x="583" d="M16 1634q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM199 82v1264q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-1264q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5zM362 1634q0 43 31 73.5t74 30.5t73.5 -30.5 t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="Ð" horiz-adv-x="1550" d="M35 713q0 29 19.5 49t47.5 20h111v553q0 39 26.5 67t65.5 28h412q342 0 545 -230q90 -100 134 -228t44 -257t-44 -257t-134 -229q-203 -229 -545 -229h-412q-39 0 -65.5 26.5t-26.5 65.5v553h-111q-29 0 -48 19.5t-19 48.5zM399 174h295q254 0 408 150t153.5 391 t-153.5 391q-154 150 -408 149h-295v-473h240q29 0 49.5 -20.5t20.5 -48.5q0 -29 -20.5 -48.5t-49.5 -19.5h-240v-471z" /> +<glyph unicode="Ñ" horiz-adv-x="1644" d="M199 82v1223q0 55 38.5 95t94.5 40h26q63 0 113 -62l789 -1138v1106q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-1223q0 -55 -40 -94t-95 -39h-25q-68 0 -108 55l-793 1145v-1108q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5zM502 1573.5q0 25.5 12 59.5 t35 62q47 68 125 68q45 0 84 -15.5t76.5 -32.5t75.5 -32.5t75 -15.5t53.5 14t24.5 35q18 49 53 49q43 0 47 -45q0 -72 -47 -131q-53 -63 -125 -63q-61 0 -131 33.5t-107.5 49t-72.5 15.5q-55 0 -84 -66q-10 -37 -47 -37q-18 0 -32.5 13.5t-14.5 39z" /> +<glyph unicode="Ò" horiz-adv-x="1660" d="M113 715q4 324 198 528q194 207 520 207q324 0 521 -207q190 -203 198 -528q-8 -326 -198 -529q-197 -207 -521 -206q-326 0 -520 206q-195 205 -198 529zM299 715q0 -244 139 -400q143 -161 393 -161t394 161q139 156 139 400t-139 399q-143 162 -394 162 q-250 0 -393 -162q-139 -156 -139 -399zM659 1755q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51z" /> +<glyph unicode="Ó" horiz-adv-x="1660" d="M113 715q4 324 198 528q194 207 520 207q324 0 521 -207q190 -203 198 -528q-8 -326 -198 -529q-197 -207 -521 -206q-326 0 -520 206q-195 205 -198 529zM299 715q0 -244 139 -400q143 -161 393 -161t394 161q139 156 139 400t-139 399q-143 162 -394 162 q-250 0 -393 -162q-139 -156 -139 -399zM741 1562q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="Ô" horiz-adv-x="1660" d="M113 715q4 324 198 528q194 207 520 207q324 0 521 -207q190 -203 198 -528q-8 -326 -198 -529q-197 -207 -521 -206q-326 0 -520 206q-195 205 -198 529zM299 715q0 -244 139 -400q143 -161 393 -161t394 161q139 156 139 400t-139 399q-143 162 -394 162 q-250 0 -393 -162q-139 -156 -139 -399zM555 1559.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30z" /> +<glyph unicode="Õ" horiz-adv-x="1660" d="M113 715q4 324 198 528q194 207 520 207q324 0 521 -207q190 -203 198 -528q-8 -326 -198 -529q-197 -207 -521 -206q-326 0 -520 206q-195 205 -198 529zM299 715q0 -244 139 -400q143 -161 393 -161t394 161q139 156 139 400t-139 399q-143 162 -394 162 q-250 0 -393 -162q-139 -156 -139 -399zM502 1573.5q0 25.5 12 59.5t35 62q47 68 125 68q45 0 84 -15.5t76.5 -32.5t75.5 -32.5t75 -15.5t53.5 14t24.5 35q18 49 53 49q43 0 47 -45q0 -72 -47 -131q-53 -63 -125 -63q-61 0 -131 33.5t-107.5 49t-72.5 15.5q-55 0 -84 -66 q-10 -37 -47 -37q-18 0 -32.5 13.5t-14.5 39z" /> +<glyph unicode="Ö" horiz-adv-x="1660" d="M113 715q4 324 198 528q194 207 520 207q324 0 521 -207q190 -203 198 -528q-8 -326 -198 -529q-197 -207 -521 -206q-326 0 -520 206q-195 205 -198 529zM299 715q0 -244 139 -400q143 -161 393 -161t394 161q139 156 139 400t-139 399q-143 162 -394 162 q-250 0 -393 -162q-139 -156 -139 -399zM555 1634q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM901 1634q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="×" horiz-adv-x="1153" d="M121 152q0 31 24 55l322 321l-322 322q-25 25 -24 55q0 31 21.5 54.5t54 23.5t57.5 -25l321 -321l322 321q25 25 57.5 25t54 -23.5t21.5 -54.5t-24 -55l-322 -322l322 -321q25 -25 24 -55q0 -31 -21.5 -54.5t-54 -23.5t-57.5 24l-322 322l-321 -322q-25 -25 -57.5 -24.5 t-54 24t-21.5 54.5z" /> +<glyph unicode="Ø" horiz-adv-x="1660" d="M113 715q4 324 198 528q195 207 520 207q215 0 386 -100l81 118q14 20 40 20.5t40.5 -14t14.5 -33t-13 -36.5l-80 -115q117 -98 181.5 -245.5t68.5 -329.5q-8 -326 -198 -529q-197 -207 -521 -206q-219 0 -382 96l-82 -117q-14 -20 -40 -20t-40.5 14t-14.5 32.5t13 37.5 l80 112q-244 201 -252 580zM299 715q0 -272 170 -430l643 919q-123 72 -265 72t-241.5 -43t-167.5 -119q-139 -156 -139 -399zM551 223q121 -70 264 -69.5t242.5 43.5t167.5 118q139 156 139 400q0 268 -168 428z" /> +<glyph unicode="Ù" horiz-adv-x="1552" d="M188 537v809q0 39 27 66.5t66 27.5t66.5 -28t27.5 -66v-816q0 -182 125 -286q115 -94 276 -94q162 0 277 94q125 104 125 286v816q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-809q0 -268 -193 -422q-166 -135 -395 -135q-233 0 -397 135q-190 154 -191 422zM616 1755 q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51z" /> +<glyph unicode="Ú" horiz-adv-x="1552" d="M188 537v809q0 39 27 66.5t66 27.5t66.5 -28t27.5 -66v-816q0 -182 125 -286q115 -94 276 -94q162 0 277 94q125 104 125 286v816q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-809q0 -268 -193 -422q-166 -135 -395 -135q-233 0 -397 135q-190 154 -191 422zM673 1562 q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="Û" horiz-adv-x="1552" d="M188 537v809q0 39 27 66.5t66 27.5t66.5 -28t27.5 -66v-816q0 -182 125 -286q115 -94 276 -94q162 0 277 94q125 104 125 286v816q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-809q0 -268 -193 -422q-166 -135 -395 -135q-233 0 -397 135q-190 154 -191 422z M499 1559.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30z" /> +<glyph unicode="Ü" horiz-adv-x="1552" d="M188 537v809q0 39 27 66.5t66 27.5t66.5 -28t27.5 -66v-816q0 -182 125 -286q115 -94 276 -94q162 0 277 94q125 104 125 286v816q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-809q0 -268 -193 -422q-166 -135 -395 -135q-233 0 -397 135q-190 154 -191 422zM500 1634 q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM846 1634q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="Ý" horiz-adv-x="1320" d="M61.5 1351.5q-0.5 34.5 24.5 61.5t71 27t76 -47l429 -623l428 623q31 47 76.5 47t70.5 -27t25 -61.5t-17 -61.5l-491 -686v-522q0 -39 -27 -65.5t-65 -26.5q-39 0 -67 26.5t-28 65.5v522l-489 686q-16 27 -16.5 61.5zM577 1562q0 31 15 45l104 185q20 39 62 39 q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="Þ" horiz-adv-x="1374" d="M199 82v1264q0 39 26.5 66.5t65.5 27.5t66.5 -28t27.5 -66v-146h373q285 0 428 -147q119 -119 119 -308q0 -188 -119 -307q-143 -147 -428 -147h-373v-209q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5zM385 467h354q211 0 305 90q74 70 74 188q0 190 -190 254 q-74 25 -189 25h-354v-557z" /> +<glyph unicode="ß" horiz-adv-x="1249" d="M162 84v911q0 215 129 336q125 119 334 119q176 0 301 -96q147 -111 147 -305q0 -207 -143 -291q-41 -25 -82 -37q129 -33 201 -103q104 -100 104 -262q0 -178 -121 -284q-106 -92 -268 -92q-131 0 -227 34q-66 23 -66 78q0 35 22.5 57.5t47 22.5t63.5 -13.5t98.5 -13.5 t99.5 9.5t77 33.5q88 61 88 191q0 117 -101 186q-96 68 -252 68q-37 0 -57 20.5t-20 53t21.5 53t55.5 24.5q127 14 200 80t73 173.5t-71 173t-193 65.5q-186 0 -250 -154q-25 -57 -25 -149v-889q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5z" /> +<glyph unicode="à" horiz-adv-x="1136" d="M78 287q0 152 115 237q125 94 356 94h248v17q0 137 -67.5 195.5t-207.5 58.5q-119 0 -272 -49q-16 -4 -36.5 -4t-43.5 21.5t-22.5 66t53.5 67.5q172 74 356 74q209 0 324 -127q102 -111 102 -276v-580q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v53 q-55 -57 -148.5 -106t-236.5 -49q-141 0 -236 81q-98 86 -98 226zM264 307q0 -164 217 -164q96 0 179 47.5t137 106.5v172h-224q-145 0 -227 -37t-82 -125zM387 1403q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51 z" /> +<glyph unicode="á" horiz-adv-x="1136" d="M78 287q0 152 115 237q125 94 356 94h248v17q0 137 -67.5 195.5t-207.5 58.5q-119 0 -272 -49q-16 -4 -36.5 -4t-43.5 21.5t-22.5 66t53.5 67.5q172 74 356 74q209 0 324 -127q102 -111 102 -276v-580q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v53 q-55 -57 -148.5 -106t-236.5 -49q-141 0 -236 81q-98 86 -98 226zM264 307q0 -164 217 -164q96 0 179 47.5t137 106.5v172h-224q-145 0 -227 -37t-82 -125zM458 1210q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5 t-15.5 33.5z" /> +<glyph unicode="â" horiz-adv-x="1136" d="M78 287q0 152 115 237q125 94 356 94h248v17q0 137 -67.5 195.5t-207.5 58.5q-119 0 -272 -49q-16 -4 -36.5 -4t-43.5 21.5t-22.5 66t53.5 67.5q172 74 356 74q209 0 324 -127q102 -111 102 -276v-580q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v53 q-55 -57 -148.5 -106t-236.5 -49q-141 0 -236 81q-98 86 -98 226zM264 307q0 -164 217 -164q96 0 179 47.5t137 106.5v172h-224q-145 0 -227 -37t-82 -125zM282 1207.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5 t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30z" /> +<glyph unicode="ã" horiz-adv-x="1136" d="M78 287q0 152 115 237q125 94 356 94h248v17q0 137 -67.5 195.5t-207.5 58.5q-119 0 -272 -49q-16 -4 -36.5 -4t-43.5 21.5t-22.5 66t53.5 67.5q172 74 356 74q209 0 324 -127q102 -111 102 -276v-580q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v53 q-55 -57 -148.5 -106t-236.5 -49q-141 0 -236 81q-98 86 -98 226zM224 1221.5q0 25.5 12 59.5t35 62q47 68 125 68q45 0 84 -15.5t76.5 -32.5t75.5 -32.5t75 -15.5t53.5 14t24.5 35q18 49 53 49q43 0 47 -45q0 -72 -47 -131q-53 -63 -125 -63q-61 0 -131 33.5t-107.5 49 t-72.5 15.5q-55 0 -84 -66q-10 -37 -47 -37q-18 0 -32.5 13.5t-14.5 39zM264 307q0 -164 217 -164q96 0 179 47.5t137 106.5v172h-224q-145 0 -227 -37t-82 -125z" /> +<glyph unicode="ä" horiz-adv-x="1136" d="M78 287q0 152 115 237q125 94 356 94h248v17q0 137 -67.5 195.5t-207.5 58.5q-119 0 -272 -49q-16 -4 -36.5 -4t-43.5 21.5t-22.5 66t53.5 67.5q172 74 356 74q209 0 324 -127q102 -111 102 -276v-580q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v53 q-55 -57 -148.5 -106t-236.5 -49q-141 0 -236 81q-98 86 -98 226zM264 307q0 -164 217 -164q96 0 179 47.5t137 106.5v172h-224q-145 0 -227 -37t-82 -125zM285 1282q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM631 1282 q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="å" horiz-adv-x="1136" d="M78 287q0 152 115 237q125 94 356 94h248v17q0 137 -67.5 195.5t-207.5 58.5q-119 0 -272 -49q-16 -4 -36.5 -4t-43.5 21.5t-22.5 66t53.5 67.5q172 74 356 74q209 0 324 -127q102 -111 102 -276v-580q0 -39 -27.5 -65.5t-66.5 -26.5t-65.5 26.5t-26.5 65.5v53 q-55 -57 -148.5 -106t-236.5 -49q-141 0 -236 81q-98 86 -98 226zM264 307q0 -164 217 -164q96 0 179 47.5t137 106.5v172h-224q-145 0 -227 -37t-82 -125zM358 1321q0 80 56.5 136t134.5 56q41 0 76.5 -15t62.5 -40q55 -57 55 -137t-56.5 -136.5t-136 -56.5t-136 56.5 t-56.5 136.5zM450 1321q0 -41 30 -70.5t71 -29.5t70.5 29.5t29.5 70.5t-29.5 70.5t-70.5 29.5t-71 -29.5t-30 -70.5z" /> +<glyph unicode="æ" horiz-adv-x="1851" d="M76 287q0 231 262 303q88 23 209 22h248v23q0 137 -68 195.5t-207 58.5q-119 0 -272 -49q-16 -4 -37 -4t-43.5 21.5t-22.5 66.5t64 71q162 70 344 70q244 0 350 -172q131 172 371 172q225 0 360 -147q129 -141 129 -367q0 -35 -23.5 -61.5t-66.5 -26.5h-704 q37 -309 362 -309q150 0 277 63q16 8 42.5 8t51 -22.5t24.5 -50.5q0 -53 -44 -77t-78.5 -40.5t-75.5 -28.5q-92 -27 -213 -26q-281 0 -416 178q-119 -178 -422 -178q-170 0 -282 81q-119 84 -119 226zM262 307q0 -66 63.5 -115t188.5 -49q190 0 256 103q25 39 25 100v117 h-224q-145 0 -227 -34t-82 -122zM969 612h610q-8 147 -109 228q-84 68 -196 67q-113 0 -197 -67q-100 -80 -108 -228z" /> +<glyph unicode="ç" horiz-adv-x="1099" d="M94 522q0 248 164 400q156 143 383 143q123 0 202 -32t126 -62.5t47 -67.5t-22.5 -63.5t-45.5 -26.5q-35 0 -71 21q-104 57 -220 57q-180 0 -278 -101.5t-98 -267.5t98 -267t278 -101q80 0 131.5 18t83.5 37q43 23 71 22.5t50.5 -27t22.5 -63.5t-47 -67 q-139 -90 -324 -94l-61 -109q33 8 86 8t97 -39t44 -104q0 -188 -227 -189q-98 0 -185 54q-23 10 -22 34q0 41 39 41q8 0 20 -6q64 -35 121 -35q117 0 117 95q0 31 -21.5 47t-48.5 16q-49 0 -74 -12q-33 -16 -44 -16.5t-22 9t-11 25t8 27.5l98 160q-201 27 -330 164 q-135 147 -135 372z" /> +<glyph unicode="è" horiz-adv-x="1167" d="M100 522q0 225 117 375q131 168 373 168q229 0 362 -156q125 -145 125 -360q0 -39 -25.5 -65.5t-68.5 -26.5h-694q16 -140 104 -221.5t246 -81.5t264 53q37 18 63.5 18t51 -22.5t24.5 -50.5q0 -53 -44 -77t-78.5 -40.5t-75.5 -28.5q-92 -27 -213 -26q-252 0 -391.5 141 t-139.5 401zM289 608h604q-8 145 -107 230q-81 69 -196 69q-182 0 -266 -162q-31 -57 -35 -137zM428 1403q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51z" /> +<glyph unicode="é" horiz-adv-x="1167" d="M100 522q0 225 117 375q131 168 373 168q229 0 362 -156q125 -145 125 -360q0 -39 -25.5 -65.5t-68.5 -26.5h-694q16 -140 104 -221.5t246 -81.5t264 53q37 18 63.5 18t51 -22.5t24.5 -50.5q0 -53 -44 -77t-78.5 -40.5t-75.5 -28.5q-92 -27 -213 -26q-252 0 -391.5 141 t-139.5 401zM289 608h604q-8 145 -107 230q-81 69 -196 69q-182 0 -266 -162q-31 -57 -35 -137zM487 1210q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="ê" horiz-adv-x="1167" d="M100 522q0 225 117 375q131 168 373 168q229 0 362 -156q125 -145 125 -360q0 -39 -25.5 -65.5t-68.5 -26.5h-694q16 -140 104 -221.5t246 -81.5t264 53q37 18 63.5 18t51 -22.5t24.5 -50.5q0 -53 -44 -77t-78.5 -40.5t-75.5 -28.5q-92 -27 -213 -26q-252 0 -391.5 141 t-139.5 401zM289 608h604q-8 145 -107 230q-81 69 -196 69q-182 0 -266 -162q-31 -57 -35 -137zM311 1207.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18 t-17.5 30z" /> +<glyph unicode="ë" horiz-adv-x="1167" d="M100 522q0 225 117 375q131 168 373 168q229 0 362 -156q125 -145 125 -360q0 -39 -25.5 -65.5t-68.5 -26.5h-694q16 -140 104 -221.5t246 -81.5t264 53q37 18 63.5 18t51 -22.5t24.5 -50.5q0 -53 -44 -77t-78.5 -40.5t-75.5 -28.5q-92 -27 -213 -26q-252 0 -391.5 141 t-139.5 401zM289 608h604q-8 145 -107 230q-81 69 -196 69q-182 0 -266 -162q-31 -57 -35 -137zM311 1282q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM657 1282q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5 t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="ì" horiz-adv-x="526" d="M86 1403q0 76 82 76q41 0 61 -39l105 -185q14 -14 14 -38.5t-15.5 -40t-41 -15.5t-43.5 23l-142 168q-20 22 -20 51zM170 82v879q0 40 26.5 67t66.5 27t66.5 -27t26.5 -67v-879q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5z" /> +<glyph unicode="í" horiz-adv-x="526" d="M170 82v879q0 40 26.5 67t66.5 27t66.5 -27t26.5 -67v-879q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5zM178 1210q0 31 15 45l104 185q20 39 61 39q82 0 82 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="î" horiz-adv-x="526" d="M-14 1207.5v23.5t16 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16.5 -40t-17 -42.5t-42 -18.5t-39.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42 18t-17 30zM170 82v879q0 40 26.5 67t66.5 27t66.5 -27t26.5 -67v-879q0 -39 -26.5 -65.5t-66.5 -26.5 t-66.5 26.5t-26.5 65.5z" /> +<glyph unicode="ï" horiz-adv-x="526" d="M-14 1282q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM170 82v879q0 40 26.5 67t66.5 27t66.5 -27t26.5 -67v-879q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5zM332 1282q0 43 30.5 73.5t73.5 30.5t74 -30.5 t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5z" /> +<glyph unicode="ð" horiz-adv-x="1226" d="M100 508q0 217 125 364q135 162 355 162q120 0 231 -57q-84 123 -219 240l-172 -101q-25 -12 -41.5 -12t-30.5 14.5t-14 41t31 42.5l139 82q-94 66 -134 87.5t-51.5 41t-11.5 49t25.5 54t54.5 24.5t62 -20q111 -66 210 -146l140 84q16 10 34.5 10t33 -14t14.5 -41 t-25 -41l-115 -67q377 -344 377 -744q0 -406 -274 -536q-98 -45 -224 -45t-220.5 37.5t-161.5 107.5q-137 145 -138 383zM281 516q0 -188 106 -287q90 -86 221 -86t221 86q109 100 109 287q0 182 -109 283q-88 84 -221 84t-221 -84q-106 -98 -106 -283z" /> +<glyph unicode="ñ" horiz-adv-x="1247" d="M162 82v879q0 41 26.5 67.5t65.5 26.5t66.5 -27t27.5 -67v-84q82 86 141 120q117 68 222.5 68t173 -32t114.5 -87q96 -113 97 -282v-582q0 -39 -28 -65.5t-67 -26.5t-65.5 26.5t-26.5 65.5v561q0 117 -52 183.5t-173 66.5q-180 0 -336 -197v-614q0 -39 -27.5 -65.5 t-66.5 -26.5t-65.5 26.5t-26.5 65.5zM306 1221.5q0 25.5 12 59.5t35 62q47 68 125 68q45 0 84 -15.5t76.5 -32.5t75.5 -32.5t75 -15.5t53.5 14t24.5 35q18 49 53 49q43 0 47 -45q0 -72 -47 -131q-53 -63 -125 -63q-61 0 -131 33.5t-107.5 49t-72.5 15.5q-55 0 -84 -66 q-10 -37 -47 -37q-18 0 -32.5 13.5t-14.5 39z" /> +<glyph unicode="ò" horiz-adv-x="1245" d="M98 522q0 244 144 393q141 150 381 150q238 0 381 -150q143 -152 143 -393q0 -242 -143 -393q-143 -150 -381 -149q-240 0 -381 149q-143 150 -144 393zM284.5 523q0.5 -101 31 -172.5t78.5 -116t108.5 -64.5t119 -20t119 20t109.5 63q111 100 111 291q0 184 -111 287 q-92 84 -227 84q-221 0 -308 -199q-31 -72 -30.5 -173zM446 1403q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51z" /> +<glyph unicode="ó" horiz-adv-x="1245" d="M98 522q0 244 144 393q141 150 381 150q238 0 381 -150q143 -152 143 -393q0 -242 -143 -393q-143 -150 -381 -149q-240 0 -381 149q-143 150 -144 393zM284.5 523q0.5 -101 31 -172.5t78.5 -116t108.5 -64.5t119 -20t119 20t109.5 63q111 100 111 291q0 184 -111 287 q-92 84 -227 84q-221 0 -308 -199q-31 -72 -30.5 -173zM536 1210q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="ô" horiz-adv-x="1245" d="M98 522q0 244 144 393q141 150 381 150q238 0 381 -150q143 -152 143 -393q0 -242 -143 -393q-143 -150 -381 -149q-240 0 -381 149q-143 150 -144 393zM284.5 523q0.5 -101 31 -172.5t78.5 -116t108.5 -64.5t119 -20t119 20t109.5 63q111 100 111 291q0 184 -111 287 q-92 84 -227 84q-221 0 -308 -199q-31 -72 -30.5 -173zM346 1207.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30z" /> +<glyph unicode="õ" horiz-adv-x="1245" d="M98 522q0 244 144 393q141 150 381 150q238 0 381 -150q143 -152 143 -393q0 -242 -143 -393q-143 -150 -381 -149q-240 0 -381 149q-143 150 -144 393zM284.5 523q0.5 -101 31 -172.5t78.5 -116t108.5 -64.5t119 -20t119 20t109.5 63q111 100 111 291q0 184 -111 287 q-92 84 -227 84q-221 0 -308 -199q-31 -72 -30.5 -173zM295 1221.5q0 25.5 12 59.5t35 62q47 68 125 68q45 0 84 -15.5t76.5 -32.5t75.5 -32.5t75 -15.5t53.5 14t24.5 35q18 49 53 49q43 0 47 -45q0 -72 -47 -131q-53 -63 -125 -63q-61 0 -131 33.5t-107.5 49t-72.5 15.5 q-55 0 -84 -66q-10 -37 -47 -37q-18 0 -32.5 13.5t-14.5 39z" /> +<glyph unicode="ö" horiz-adv-x="1245" d="M98 522q0 244 144 393q141 150 381 150q238 0 381 -150q143 -152 143 -393q0 -242 -143 -393q-143 -150 -381 -149q-240 0 -381 149q-143 150 -144 393zM284.5 523q0.5 -101 31 -172.5t78.5 -116t108.5 -64.5t119 -20t119 20t109.5 63q111 100 111 291q0 184 -111 287 q-92 84 -227 84q-221 0 -308 -199q-31 -72 -30.5 -173zM346 1282q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM692 1282q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="÷" horiz-adv-x="1458" d="M150 678q0 35 23.5 59.5t57.5 24.5h994q35 0 59.5 -24.5t24.5 -59.5t-24.5 -58.5t-59.5 -23.5h-994q-35 0 -58 23.5t-23 58.5zM625 299q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM625 1057q0 43 30.5 73.5t73.5 30.5 t74 -30.5t31 -73.5t-31 -74t-74 -31t-73.5 31t-30.5 74z" /> +<glyph unicode="ø" horiz-adv-x="1245" d="M98 522q0 244 144 393q141 150 381 150q143 0 270 -66l59 84q14 20 40 20.5t40.5 -14t14.5 -33t-13 -36.5l-57 -82q170 -150 170 -416q0 -242 -143 -393q-143 -150 -381 -149q-154 0 -273 65l-61 -88q-14 -20 -40 -20t-40 14t-14 32.5t12 36.5l59 84q-168 152 -168 418z M284.5 530.5q0.5 -178.5 88.5 -274.5l418 596q-80 43 -154 43t-134.5 -19.5t-109.5 -64.5q-109 -102 -108.5 -280.5zM455 193q78 -43 151.5 -43t134 20t109.5 63q111 100 111 291q0 162 -89 264z" /> +<glyph unicode="ù" horiz-adv-x="1249" d="M154 381v582q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-562q0 -117 52 -183t173 -66q180 0 336 196v615q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-879q0 -41 -26.5 -67.5t-65.5 -26.5t-66.5 26.5t-27.5 67.5v84q-82 -86 -141 -121q-117 -68 -222.5 -67.5 t-173 32t-114.5 86.5q-96 113 -96 283zM444 1403q0 76 82 76q41 0 62 -39l104 -185q14 -14 14 -38.5t-15 -40t-40.5 -15.5t-44.5 23l-141 168q-21 22 -21 51z" /> +<glyph unicode="ú" horiz-adv-x="1249" d="M154 381v582q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-562q0 -117 52 -183t173 -66q180 0 336 196v615q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-879q0 -41 -26.5 -67.5t-65.5 -26.5t-66.5 26.5t-27.5 67.5v84q-82 -86 -141 -121q-117 -68 -222.5 -67.5 t-173 32t-114.5 86.5q-96 113 -96 283zM534 1210q0 31 15 45l104 185q20 39 62 39q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="û" horiz-adv-x="1249" d="M154 381v582q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-562q0 -117 52 -183t173 -66q180 0 336 196v615q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-879q0 -41 -26.5 -67.5t-65.5 -26.5t-66.5 26.5t-27.5 67.5v84q-82 -86 -141 -121q-117 -68 -222.5 -67.5 t-173 32t-114.5 86.5q-96 113 -96 283zM344 1207.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30z" /> +<glyph unicode="ü" horiz-adv-x="1249" d="M154 381v582q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-562q0 -117 52 -183t173 -66q180 0 336 196v615q0 39 27.5 65.5t66.5 26.5t65.5 -27t26.5 -65v-879q0 -41 -26.5 -67.5t-65.5 -26.5t-66.5 26.5t-27.5 67.5v84q-82 -86 -141 -121q-117 -68 -222.5 -67.5 t-173 32t-114.5 86.5q-96 113 -96 283zM344 1282q0 43 30.5 73.5t73.5 30.5t74 -30.5t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM690 1282q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="ý" horiz-adv-x="1091" d="M49 970.5q0 28.5 26.5 56.5t59.5 28q68 0 92 -58l316 -782l321 778q27 61 86 62q39 0 65.5 -28t26.5 -57.5t-6 -43.5l-559 -1344q-27 -63 -86 -63q-37 0 -62.5 26.5t-25.5 53t6 43.5l133 342l-385 938q-8 20 -8 48.5zM458 1210q0 31 15 45l104 185q20 39 62 39 q82 0 81 -76q0 -29 -20 -51l-141 -168q-18 -23 -44 -23t-41.5 15.5t-15.5 33.5z" /> +<glyph unicode="þ" horiz-adv-x="1292" d="M162 -387v1798q0 41 26.5 67.5t66.5 26.5t66.5 -26.5t26.5 -67.5v-502q152 156 350.5 156t339.5 -141q156 -156 156 -402q0 -250 -156 -403q-143 -139 -340.5 -139t-349.5 155v-522q0 -41 -26.5 -67.5t-66.5 -26.5t-66.5 26.5t-26.5 67.5zM348 307q139 -154 324 -153 q233 0 311 208q25 70 25 160q0 176 -95 277q-90 92 -241 92q-184 0 -324 -154v-430z" /> +<glyph unicode="ÿ" horiz-adv-x="1091" d="M49 970.5q0 28.5 26.5 56.5t59.5 28q68 0 92 -58l316 -782l321 778q27 61 86 62q39 0 65.5 -28t26.5 -57.5t-6 -43.5l-559 -1344q-27 -63 -86 -63q-37 0 -62.5 26.5t-25.5 53t6 43.5l133 342l-385 938q-8 20 -8 48.5zM266 1282q0 43 30.5 73.5t73.5 30.5t74 -30.5 t31 -73.5t-31 -73.5t-74 -30.5t-73.5 30.5t-30.5 73.5zM612 1282q0 43 31 73.5t74 30.5t73.5 -30.5t30.5 -73.5t-30.5 -73.5t-73.5 -30.5t-74 30.5t-31 73.5z" /> +<glyph unicode="ˆ" horiz-adv-x="837" d="M139 1207.5v23.5t17 29l139 143q41 41 82 41h78q41 0 82 -41l139 -143q16 -16 16 -40t-17.5 -42.5t-42 -18.5t-38.5 15l-178 151l-178 -151q-14 -14 -39 -14.5t-42.5 18t-17.5 30z" /> +<glyph unicode="˜" horiz-adv-x="884" d="M113 1221.5q0 25.5 12 59.5t35 62q47 68 125 68q45 0 84 -15.5t76.5 -32.5t75.5 -32.5t75 -15.5t53.5 14t24.5 35q18 49 53 49q43 0 47 -45q0 -72 -47 -131q-53 -63 -125 -63q-61 0 -131 33.5t-107.5 49t-72.5 15.5q-55 0 -84 -66q-10 -37 -47 -37q-18 0 -32.5 13.5 t-14.5 39z" /> +<glyph unicode=" " horiz-adv-x="940" /> +<glyph unicode=" " horiz-adv-x="1880" /> +<glyph unicode=" " horiz-adv-x="940" /> +<glyph unicode=" " horiz-adv-x="1880" /> +<glyph unicode=" " horiz-adv-x="626" /> +<glyph unicode=" " horiz-adv-x="470" /> +<glyph unicode=" " horiz-adv-x="313" /> +<glyph unicode=" " horiz-adv-x="313" /> +<glyph unicode=" " horiz-adv-x="235" /> +<glyph unicode=" " horiz-adv-x="376" /> +<glyph unicode=" " horiz-adv-x="104" /> +<glyph unicode="‐" horiz-adv-x="835" d="M141 573q0 35 23.5 59.5t58.5 24.5h387q35 0 59.5 -24.5t24.5 -59.5t-24.5 -58t-59.5 -23h-387q-35 0 -58.5 23.5t-23.5 57.5z" /> +<glyph unicode="‑" horiz-adv-x="835" d="M141 573q0 35 23.5 59.5t58.5 24.5h387q35 0 59.5 -24.5t24.5 -59.5t-24.5 -58t-59.5 -23h-387q-35 0 -58.5 23.5t-23.5 57.5z" /> +<glyph unicode="‒" horiz-adv-x="835" d="M141 573q0 35 23.5 59.5t58.5 24.5h387q35 0 59.5 -24.5t24.5 -59.5t-24.5 -58t-59.5 -23h-387q-35 0 -58.5 23.5t-23.5 57.5z" /> +<glyph unicode="–" horiz-adv-x="1400" d="M141 573q0 35 23.5 59.5t58.5 24.5h953q34 0 59 -24.5t25 -59.5t-25 -58t-59 -23h-953q-35 0 -58.5 23.5t-23.5 57.5z" /> +<glyph unicode="—" horiz-adv-x="1824" d="M141 573q0 35 23.5 59.5t58.5 24.5h1376q35 0 59.5 -24.5t24.5 -59.5t-24.5 -58t-59.5 -23h-1376q-35 0 -58.5 23.5t-23.5 57.5z" /> +<glyph unicode="‘" horiz-adv-x="522" d="M135 1092v120q0 109 53 193q41 61 115 106q10 10 36 10.5t42 -18t16 -47.5t-30 -47q-45 -27 -75 -66.5t-30 -123.5h8q47 0 81 -34t34 -81v-12q0 -47 -34 -81t-81 -34h-20q-47 0 -81 33.5t-34 81.5z" /> +<glyph unicode="’" horiz-adv-x="487" d="M129 1042.5q0 28.5 31 47.5q45 27 74.5 66.5t29.5 123.5h-8q-47 0 -81 34t-34 81v12q0 47 34 81t81 34h20q48 0 81.5 -34t33.5 -81v-121q0 -109 -55 -192q-39 -61 -113 -107q-10 -10 -35.5 -10t-42 18.5t-16.5 47z" /> +<glyph unicode="‚" horiz-adv-x="532" d="M129 -243.5q0 28.5 31 46.5q45 27 74.5 67t29.5 124h-8q-47 0 -81 33.5t-34 81.5v12q0 47 34 81t81 34h20q48 0 81.5 -34t33.5 -81v-121q0 -109 -55 -193q-39 -61 -113 -106q-10 -10 -35.5 -10t-42 18.5t-16.5 47z" /> +<glyph unicode="“" horiz-adv-x="894" d="M135 1092v120q0 109 53 193q41 61 115 106q10 10 36 10.5t42 -18t16 -47.5t-30 -47q-45 -27 -75 -66.5t-30 -123.5h8q47 0 81 -34t34 -81v-12q0 -47 -34 -81t-81 -34h-20q-47 0 -81 33.5t-34 81.5zM506 1092v120q0 109 55 193q39 61 113 106q10 10 35.5 10.5t42 -18 t16.5 -47.5t-31 -47q-45 -27 -74.5 -66.5t-29.5 -123.5h8q47 0 81 -34t34 -81v-12q0 -47 -34 -81t-81 -34h-20q-47 0 -81 33.5t-34 81.5z" /> +<glyph unicode="”" horiz-adv-x="860" d="M129 1042.5q0 28.5 31 47.5q45 27 74.5 66.5t29.5 123.5h-8q-47 0 -81 34t-34 81v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-121q0 -109 -55 -192q-39 -61 -113 -107q-10 -10 -35.5 -10t-42 18.5t-16.5 47zM500 1042.5q0 28.5 30 47.5q45 27 75 66.5t30 123.5h-8 q-47 0 -81 34t-34 81v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-121q0 -109 -53 -192q-41 -61 -115 -107q-10 -10 -36 -10t-42 18.5t-16 47z" /> +<glyph unicode="„" horiz-adv-x="905" d="M129 -243.5q0 28.5 31 46.5q45 27 74.5 67t29.5 124h-8q-47 0 -81 33.5t-34 81.5v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-121q0 -109 -55 -193q-39 -61 -113 -106q-10 -10 -35.5 -10t-42 18.5t-16.5 47zM500 -243.5q0 28.5 30 46.5q45 27 75 67t30 124h-8 q-47 0 -81 33.5t-34 81.5v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-121q0 -109 -53 -193q-41 -61 -115 -106q-10 -10 -36 -10t-42 18.5t-16 47z" /> +<glyph unicode="•" horiz-adv-x="772" d="M115 805q0 113 79.5 192.5t190.5 79.5q57 0 106.5 -21.5t86.5 -58.5q80 -80 79 -192q0 -113 -79.5 -193t-190.5 -80q-113 0 -192.5 80t-79.5 193z" /> +<glyph unicode="…" horiz-adv-x="1982" d="M141 109v12q0 47 34 81t81 34h20q47 0 81 -34t34 -81v-12q0 -47 -33.5 -81t-81.5 -34h-20q-47 0 -81 33.5t-34 81.5zM868 109v12q0 47 34 81t81 34h21q47 0 80.5 -34t33.5 -81v-12q0 -47 -33.5 -81t-80.5 -34h-21q-47 0 -81 33.5t-34 81.5zM1589 109v12q0 47 34 81t81 34 h20q47 0 81 -34t34 -81v-12q0 -47 -33.5 -81t-81.5 -34h-20q-47 0 -81 33.5t-34 81.5z" /> +<glyph unicode=" " horiz-adv-x="376" /> +<glyph unicode="‹" horiz-adv-x="772" d="M111 522q0 51 36 88l336 371q18 23 55 23t60 -23t23 -56.5t-19 -54.5l-328 -348l328 -348q18 -23 18.5 -55.5t-22.5 -55t-59.5 -22.5t-55.5 22l-336 371q-37 37 -36 88z" /> +<glyph unicode="›" horiz-adv-x="772" d="M152 119q0 33 18 55l328 348l-328 348q-18 20 -18 54t22.5 57t59 23t55.5 -23l336 -371q37 -37 37 -88t-37 -88l-336 -371q-18 -23 -55 -22.5t-59.5 23t-22.5 55.5z" /> +<glyph unicode=" " horiz-adv-x="470" /> +<glyph unicode="€" horiz-adv-x="1396" d="M86 543q0 31 21.5 53t52.5 22h112q-8 46 -8 97q0 47 8 96h-112q-31 0 -52.5 21.5t-21.5 52.5t21.5 52t52.5 21h145q68 217 240 353q176 139 413 139q164 0 299 -66q47 -25 47.5 -66.5t-24.5 -65t-47 -23.5q-31 0 -66 12q-80 33 -182 33t-172 -21.5t-129 -62.5 q-123 -86 -184 -232h587q31 0 52.5 -21.5t21.5 -51t-21.5 -52t-52.5 -22.5h-630q-6 -47 -6 -97t6 -96h528q31 0 53.5 -22.5t22.5 -54t-20.5 -52t-55.5 -20.5h-485q61 -145 183 -229t275 -84q123 0 224 34q20 10 46.5 10.5t51.5 -23t25 -66.5t-48 -66q-135 -66 -278 -65.5 t-247.5 37t-186.5 102.5q-174 137 -240 350h-145q-31 0 -52.5 21.5t-21.5 52.5z" /> +<glyph unicode="™" horiz-adv-x="1951" d="M117 1370q0 25 17.5 42.5t41.5 17.5h541q25 0 42 -17.5t17 -42.5t-17.5 -42t-41.5 -17h-207v-598q0 -29 -18.5 -46.5t-47.5 -17.5t-46 17.5t-17 46.5v598h-205q-25 0 -42 17.5t-17 41.5zM889 715v633q0 35 24.5 60.5t61.5 25.5h35q55 0 80 -54l237 -587l238 587 q25 53 80 54h34q37 0 61.5 -26t24.5 -60v-633q0 -29 -18 -47.5t-47 -18.5t-47.5 18.5t-18.5 47.5v536l-227 -551q-20 -51 -80 -51q-59 0 -80 51l-227 551v-536q0 -29 -18.5 -47.5t-47.5 -18.5t-47 18.5t-18 47.5z" /> +<glyph unicode="◼" horiz-adv-x="1054" d="M0 0v1055h1055v-1055h-1055z" /> +<glyph unicode="fi" horiz-adv-x="1312" d="M39 965q0 35 22.5 57t57.5 22h121v119q0 178 100 275q82 78 207 78q96 0 178 -41q47 -27 47 -64t-21.5 -61.5t-54.5 -24.5l-102 12q-78 0 -123 -35.5t-45 -144.5v-113h629q39 -4 63.5 -29.5t24.5 -64.5v-868q0 -39 -26.5 -65.5t-66.5 -26.5t-67 26.5t-27 65.5v803h-530 v-803q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5v803h-121q-35 0 -57.5 22.5t-22.5 57.5zM940 1362v8q0 43 30.5 74t73.5 31h13q43 0 73.5 -31t30.5 -74v-8q0 -43 -30.5 -74t-73.5 -31h-13q-43 0 -73.5 31t-30.5 74z" /> +<glyph unicode="fl" horiz-adv-x="1318" d="M39 965q0 35 22.5 57t57.5 22h121v119q0 178 100 275q82 78 207 78q96 0 178 -41q47 -27 47 -64t-21.5 -61.5t-54.5 -24.5l-102 12q-78 0 -123 -35.5t-45 -144.5v-113h256q35 0 57.5 -22.5t22.5 -56.5q0 -35 -22.5 -57.5t-57.5 -22.5h-256v-803q0 -39 -26.5 -65.5 t-66.5 -26.5t-66.5 26.5t-26.5 65.5v803h-121q-35 0 -57.5 22.5t-22.5 57.5zM954 82v1329q0 41 26.5 67.5t66.5 26.5t67 -26.5t27 -67.5v-1329q0 -39 -27 -65.5t-67 -26.5t-66.5 26.5t-26.5 65.5z" /> +<glyph unicode="ffi" horiz-adv-x="2119" d="M39 965q0 35 22.5 57t57.5 22h121v119q0 178 100 275q82 78 207 78q96 0 178 -41q47 -27 47 -64t-21.5 -61.5t-54.5 -24.5l-102 12q-78 0 -123 -35.5t-45 -144.5v-113h621v119q0 178 100 275q82 78 207 78q96 0 178 -41q47 -27 47 -64t-21.5 -61.5t-54.5 -24.5l-102 12 q-78 0 -123 -35.5t-45 -144.5v-113h622q41 0 68 -26.5t27 -67.5v-868q0 -39 -27 -65.5t-66.5 -26.5t-66.5 26.5t-27 65.5v803h-530v-803q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5v803h-621v-803q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5v803h-121 q-35 0 -57.5 22.5t-22.5 57.5zM1747 1362v8q0 43 30.5 74t73.5 31h13q43 0 73.5 -31t30.5 -74v-8q0 -43 -30.5 -74t-73.5 -31h-13q-43 0 -73.5 31t-30.5 74z" /> +<glyph unicode="ffl" horiz-adv-x="2125" d="M39 965q0 35 22.5 57t57.5 22h121v119q0 178 100 275q82 78 207 78q96 0 178 -41q47 -27 47 -64t-21.5 -61.5t-54.5 -24.5l-102 12q-78 0 -123 -35.5t-45 -144.5v-113h621v119q0 178 100 275q82 78 207 78q96 0 178 -41q47 -27 47 -64t-21.5 -61.5t-54.5 -24.5l-102 12 q-78 0 -123 -35.5t-45 -144.5v-113h256q35 0 57.5 -22.5t22.5 -56.5q0 -35 -22.5 -57.5t-57.5 -22.5h-256v-803q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5v803h-621v-803q0 -39 -26.5 -65.5t-66.5 -26.5t-66.5 26.5t-26.5 65.5v803h-121q-35 0 -57.5 22.5 t-22.5 57.5zM1761 82v1329q0 41 26.5 67.5t66.5 26.5t67 -26.5t27 -67.5v-1329q0 -39 -27 -65.5t-67 -26.5t-66.5 26.5t-26.5 65.5z" /> +<hkern u1=""" u2="‹" k="70" /> +<hkern u1=""" u2="…" k="266" /> +<hkern u1=""" u2="„" k="281" /> +<hkern u1=""" u2="‚" k="266" /> +<hkern u1=""" u2="ø" k="57" /> +<hkern u1=""" u2="ö" k="57" /> +<hkern u1=""" u2="õ" k="57" /> +<hkern u1=""" u2="ô" k="57" /> +<hkern u1=""" u2="ó" k="57" /> +<hkern u1=""" u2="ò" k="57" /> +<hkern u1=""" u2="ð" k="57" /> +<hkern u1=""" u2="ë" k="57" /> +<hkern u1=""" u2="ê" k="57" /> +<hkern u1=""" u2="é" k="57" /> +<hkern u1=""" u2="è" k="57" /> +<hkern u1=""" u2="ç" k="57" /> +<hkern u1=""" u2="æ" k="29" /> +<hkern u1=""" u2="å" k="29" /> +<hkern u1=""" u2="ä" k="29" /> +<hkern u1=""" u2="ã" k="29" /> +<hkern u1=""" u2="â" k="29" /> +<hkern u1=""" u2="á" k="29" /> +<hkern u1=""" u2="à" k="29" /> +<hkern u1=""" u2="Æ" k="131" /> +<hkern u1=""" u2="Å" k="104" /> +<hkern u1=""" u2="Ä" k="104" /> +<hkern u1=""" u2="Ã" k="104" /> +<hkern u1=""" u2="Â" k="104" /> +<hkern u1=""" u2="Á" k="104" /> +<hkern u1=""" u2="À" k="104" /> +<hkern u1=""" u2="«" k="70" /> +<hkern u1=""" u2="s" k="33" /> +<hkern u1=""" u2="q" k="57" /> +<hkern u1=""" u2="o" k="57" /> +<hkern u1=""" u2="g" k="57" /> +<hkern u1=""" u2="e" k="57" /> +<hkern u1=""" u2="d" k="57" /> +<hkern u1=""" u2="c" k="57" /> +<hkern u1=""" u2="a" k="29" /> +<hkern u1=""" u2="A" k="104" /> +<hkern u1=""" u2="@" k="41" /> +<hkern u1=""" u2="/" k="88" /> +<hkern u1=""" u2="." k="266" /> +<hkern u1=""" u2="," k="266" /> +<hkern u1="&" u2="ffl" k="27" /> +<hkern u1="&" u2="ffi" k="27" /> +<hkern u1="&" u2="fl" k="27" /> +<hkern u1="&" u2="fi" k="27" /> +<hkern u1="&" u2="”" k="94" /> +<hkern u1="&" u2="’" k="94" /> +<hkern u1="&" u2="ÿ" k="43" /> +<hkern u1="&" u2="ý" k="43" /> +<hkern u1="&" u2="ß" k="27" /> +<hkern u1="&" u2="Ý" k="115" /> +<hkern u1="&" u2="Ü" k="10" /> +<hkern u1="&" u2="Û" k="10" /> +<hkern u1="&" u2="Ú" k="10" /> +<hkern u1="&" u2="Ù" k="10" /> +<hkern u1="&" u2="Æ" k="-39" /> +<hkern u1="&" u2="y" k="43" /> +<hkern u1="&" u2="v" k="49" /> +<hkern u1="&" u2="t" k="31" /> +<hkern u1="&" u2="f" k="27" /> +<hkern u1="&" u2="Y" k="115" /> +<hkern u1="&" u2="V" k="94" /> +<hkern u1="&" u2="U" k="10" /> +<hkern u1="&" u2="T" k="98" /> +<hkern u1="&" u2="'" k="94" /> +<hkern u1="&" u2=""" k="94" /> +<hkern u1="'" u2="‹" k="70" /> +<hkern u1="'" u2="…" k="244" /> +<hkern u1="'" u2="„" k="244" /> +<hkern u1="'" u2="‚" k="244" /> +<hkern u1="'" u2="ø" k="57" /> +<hkern u1="'" u2="ö" k="57" /> +<hkern u1="'" u2="õ" k="57" /> +<hkern u1="'" u2="ô" k="57" /> +<hkern u1="'" u2="ó" k="57" /> +<hkern u1="'" u2="ò" k="57" /> +<hkern u1="'" u2="ð" k="57" /> +<hkern u1="'" u2="ë" k="57" /> +<hkern u1="'" u2="ê" k="57" /> +<hkern u1="'" u2="é" k="57" /> +<hkern u1="'" u2="è" k="57" /> +<hkern u1="'" u2="ç" k="57" /> +<hkern u1="'" u2="æ" k="29" /> +<hkern u1="'" u2="å" k="29" /> +<hkern u1="'" u2="ä" k="29" /> +<hkern u1="'" u2="ã" k="29" /> +<hkern u1="'" u2="â" k="29" /> +<hkern u1="'" u2="á" k="29" /> +<hkern u1="'" u2="à" k="29" /> +<hkern u1="'" u2="Æ" k="131" /> +<hkern u1="'" u2="Å" k="104" /> +<hkern u1="'" u2="Ä" k="104" /> +<hkern u1="'" u2="Ã" k="104" /> +<hkern u1="'" u2="Â" k="104" /> +<hkern u1="'" u2="Á" k="104" /> +<hkern u1="'" u2="À" k="104" /> +<hkern u1="'" u2="«" k="70" /> +<hkern u1="'" u2="s" k="33" /> +<hkern u1="'" u2="q" k="57" /> +<hkern u1="'" u2="o" k="57" /> +<hkern u1="'" u2="g" k="57" /> +<hkern u1="'" u2="e" k="57" /> +<hkern u1="'" u2="d" k="57" /> +<hkern u1="'" u2="c" k="57" /> +<hkern u1="'" u2="a" k="29" /> +<hkern u1="'" u2="A" k="104" /> +<hkern u1="'" u2="@" k="41" /> +<hkern u1="'" u2="/" k="88" /> +<hkern u1="'" u2="." k="244" /> +<hkern u1="'" u2="," k="244" /> +<hkern u1="(" u2="ffl" k="27" /> +<hkern u1="(" u2="ffi" k="27" /> +<hkern u1="(" u2="fl" k="27" /> +<hkern u1="(" u2="fi" k="27" /> +<hkern u1="(" u2="ÿ" k="31" /> +<hkern u1="(" u2="ý" k="31" /> +<hkern u1="(" u2="ü" k="47" /> +<hkern u1="(" u2="û" k="47" /> +<hkern u1="(" u2="ú" k="47" /> +<hkern u1="(" u2="ù" k="47" /> +<hkern u1="(" u2="ø" k="55" /> +<hkern u1="(" u2="ö" k="55" /> +<hkern u1="(" u2="õ" k="55" /> +<hkern u1="(" u2="ô" k="55" /> +<hkern u1="(" u2="ó" k="55" /> +<hkern u1="(" u2="ò" k="55" /> +<hkern u1="(" u2="ñ" k="37" /> +<hkern u1="(" u2="ð" k="55" /> +<hkern u1="(" u2="ë" k="55" /> +<hkern u1="(" u2="ê" k="55" /> +<hkern u1="(" u2="é" k="55" /> +<hkern u1="(" u2="è" k="55" /> +<hkern u1="(" u2="ç" k="55" /> +<hkern u1="(" u2="æ" k="39" /> +<hkern u1="(" u2="å" k="39" /> +<hkern u1="(" u2="ä" k="39" /> +<hkern u1="(" u2="ã" k="39" /> +<hkern u1="(" u2="â" k="39" /> +<hkern u1="(" u2="á" k="39" /> +<hkern u1="(" u2="à" k="39" /> +<hkern u1="(" u2="ß" k="27" /> +<hkern u1="(" u2="Ü" k="25" /> +<hkern u1="(" u2="Û" k="25" /> +<hkern u1="(" u2="Ú" k="25" /> +<hkern u1="(" u2="Ù" k="25" /> +<hkern u1="(" u2="Ø" k="43" /> +<hkern u1="(" u2="Ö" k="43" /> +<hkern u1="(" u2="Õ" k="43" /> +<hkern u1="(" u2="Ô" k="43" /> +<hkern u1="(" u2="Ó" k="43" /> +<hkern u1="(" u2="Ò" k="43" /> +<hkern u1="(" u2="Î" k="-35" /> +<hkern u1="(" u2="Ç" k="43" /> +<hkern u1="(" u2="y" k="31" /> +<hkern u1="(" u2="v" k="43" /> +<hkern u1="(" u2="u" k="47" /> +<hkern u1="(" u2="t" k="45" /> +<hkern u1="(" u2="s" k="39" /> +<hkern u1="(" u2="r" k="37" /> +<hkern u1="(" u2="q" k="55" /> +<hkern u1="(" u2="p" k="37" /> +<hkern u1="(" u2="o" k="55" /> +<hkern u1="(" u2="n" k="37" /> +<hkern u1="(" u2="m" k="37" /> +<hkern u1="(" u2="g" k="55" /> +<hkern u1="(" u2="f" k="27" /> +<hkern u1="(" u2="e" k="55" /> +<hkern u1="(" u2="d" k="55" /> +<hkern u1="(" u2="c" k="55" /> +<hkern u1="(" u2="a" k="39" /> +<hkern u1="(" u2="U" k="25" /> +<hkern u1="(" u2="Q" k="43" /> +<hkern u1="(" u2="O" k="43" /> +<hkern u1="(" u2="G" k="43" /> +<hkern u1="(" u2="C" k="43" /> +<hkern u1="*" u2="ø" k="29" /> +<hkern u1="*" u2="ö" k="29" /> +<hkern u1="*" u2="õ" k="29" /> +<hkern u1="*" u2="ô" k="29" /> +<hkern u1="*" u2="ó" k="29" /> +<hkern u1="*" u2="ò" k="29" /> +<hkern u1="*" u2="ð" k="29" /> +<hkern u1="*" u2="ï" k="-23" /> +<hkern u1="*" u2="î" k="-41" /> +<hkern u1="*" u2="ë" k="29" /> +<hkern u1="*" u2="ê" k="29" /> +<hkern u1="*" u2="é" k="29" /> +<hkern u1="*" u2="è" k="29" /> +<hkern u1="*" u2="ç" k="29" /> +<hkern u1="*" u2="æ" k="20" /> +<hkern u1="*" u2="å" k="20" /> +<hkern u1="*" u2="ä" k="20" /> +<hkern u1="*" u2="ã" k="20" /> +<hkern u1="*" u2="â" k="20" /> +<hkern u1="*" u2="á" k="20" /> +<hkern u1="*" u2="à" k="20" /> +<hkern u1="*" u2="Æ" k="104" /> +<hkern u1="*" u2="Å" k="84" /> +<hkern u1="*" u2="Ä" k="84" /> +<hkern u1="*" u2="Ã" k="84" /> +<hkern u1="*" u2="Â" k="84" /> +<hkern u1="*" u2="Á" k="84" /> +<hkern u1="*" u2="À" k="84" /> +<hkern u1="*" u2="q" k="29" /> +<hkern u1="*" u2="o" k="29" /> +<hkern u1="*" u2="g" k="29" /> +<hkern u1="*" u2="e" k="29" /> +<hkern u1="*" u2="d" k="29" /> +<hkern u1="*" u2="c" k="29" /> +<hkern u1="*" u2="a" k="20" /> +<hkern u1="*" u2="A" k="84" /> +<hkern u1="," u2="ffl" k="20" /> +<hkern u1="," u2="ffi" k="20" /> +<hkern u1="," u2="fl" k="20" /> +<hkern u1="," u2="fi" k="20" /> +<hkern u1="," u2="”" k="256" /> +<hkern u1="," u2="“" k="254" /> +<hkern u1="," u2="’" k="244" /> +<hkern u1="," u2="‘" k="254" /> +<hkern u1="," u2="ÿ" k="57" /> +<hkern u1="," u2="ý" k="57" /> +<hkern u1="," u2="ß" k="20" /> +<hkern u1="," u2="Ý" k="154" /> +<hkern u1="," u2="Ü" k="37" /> +<hkern u1="," u2="Û" k="37" /> +<hkern u1="," u2="Ú" k="37" /> +<hkern u1="," u2="Ù" k="37" /> +<hkern u1="," u2="Ø" k="39" /> +<hkern u1="," u2="Ö" k="39" /> +<hkern u1="," u2="Õ" k="39" /> +<hkern u1="," u2="Ô" k="39" /> +<hkern u1="," u2="Ó" k="39" /> +<hkern u1="," u2="Ò" k="39" /> +<hkern u1="," u2="Ç" k="39" /> +<hkern u1="," u2="y" k="57" /> +<hkern u1="," u2="v" k="63" /> +<hkern u1="," u2="t" k="25" /> +<hkern u1="," u2="f" k="20" /> +<hkern u1="," u2="Y" k="154" /> +<hkern u1="," u2="V" k="131" /> +<hkern u1="," u2="U" k="37" /> +<hkern u1="," u2="T" k="131" /> +<hkern u1="," u2="Q" k="39" /> +<hkern u1="," u2="O" k="39" /> +<hkern u1="," u2="G" k="39" /> +<hkern u1="," u2="C" k="39" /> +<hkern u1="," u2="'" k="244" /> +<hkern u1="," u2=""" k="256" /> +<hkern u1="-" u2="ffl" k="27" /> +<hkern u1="-" u2="ffi" k="27" /> +<hkern u1="-" u2="fl" k="27" /> +<hkern u1="-" u2="fi" k="27" /> +<hkern u1="-" u2="ß" k="27" /> +<hkern u1="-" u2="Ý" k="135" /> +<hkern u1="-" u2="Å" k="29" /> +<hkern u1="-" u2="Ä" k="29" /> +<hkern u1="-" u2="Ã" k="29" /> +<hkern u1="-" u2="Â" k="29" /> +<hkern u1="-" u2="Á" k="29" /> +<hkern u1="-" u2="À" k="29" /> +<hkern u1="-" u2="x" k="45" /> +<hkern u1="-" u2="v" k="16" /> +<hkern u1="-" u2="t" k="25" /> +<hkern u1="-" u2="f" k="27" /> +<hkern u1="-" u2="Y" k="135" /> +<hkern u1="-" u2="X" k="63" /> +<hkern u1="-" u2="V" k="68" /> +<hkern u1="-" u2="T" k="131" /> +<hkern u1="-" u2="S" k="39" /> +<hkern u1="-" u2="A" k="29" /> +<hkern u1="." u2="ffl" k="20" /> +<hkern u1="." u2="ffi" k="20" /> +<hkern u1="." u2="fl" k="20" /> +<hkern u1="." u2="fi" k="20" /> +<hkern u1="." u2="”" k="256" /> +<hkern u1="." u2="“" k="254" /> +<hkern u1="." u2="’" k="244" /> +<hkern u1="." u2="‘" k="254" /> +<hkern u1="." u2="ÿ" k="57" /> +<hkern u1="." u2="ý" k="57" /> +<hkern u1="." u2="ß" k="20" /> +<hkern u1="." u2="Ý" k="154" /> +<hkern u1="." u2="Ü" k="37" /> +<hkern u1="." u2="Û" k="37" /> +<hkern u1="." u2="Ú" k="37" /> +<hkern u1="." u2="Ù" k="37" /> +<hkern u1="." u2="Ø" k="39" /> +<hkern u1="." u2="Ö" k="39" /> +<hkern u1="." u2="Õ" k="39" /> +<hkern u1="." u2="Ô" k="39" /> +<hkern u1="." u2="Ó" k="39" /> +<hkern u1="." u2="Ò" k="39" /> +<hkern u1="." u2="Ç" k="39" /> +<hkern u1="." u2="y" k="57" /> +<hkern u1="." u2="v" k="63" /> +<hkern u1="." u2="t" k="25" /> +<hkern u1="." u2="f" k="20" /> +<hkern u1="." u2="Y" k="154" /> +<hkern u1="." u2="V" k="131" /> +<hkern u1="." u2="U" k="37" /> +<hkern u1="." u2="T" k="131" /> +<hkern u1="." u2="Q" k="39" /> +<hkern u1="." u2="O" k="39" /> +<hkern u1="." u2="G" k="39" /> +<hkern u1="." u2="C" k="39" /> +<hkern u1="." u2="'" k="244" /> +<hkern u1="." u2=""" k="256" /> +<hkern u1="/" u2="ü" k="29" /> +<hkern u1="/" u2="û" k="29" /> +<hkern u1="/" u2="ú" k="29" /> +<hkern u1="/" u2="ù" k="29" /> +<hkern u1="/" u2="ø" k="45" /> +<hkern u1="/" u2="ö" k="45" /> +<hkern u1="/" u2="õ" k="45" /> +<hkern u1="/" u2="ô" k="45" /> +<hkern u1="/" u2="ó" k="45" /> +<hkern u1="/" u2="ò" k="45" /> +<hkern u1="/" u2="ñ" k="31" /> +<hkern u1="/" u2="ð" k="45" /> +<hkern u1="/" u2="ë" k="45" /> +<hkern u1="/" u2="ê" k="45" /> +<hkern u1="/" u2="é" k="45" /> +<hkern u1="/" u2="è" k="45" /> +<hkern u1="/" u2="ç" k="45" /> +<hkern u1="/" u2="æ" k="41" /> +<hkern u1="/" u2="å" k="41" /> +<hkern u1="/" u2="ä" k="41" /> +<hkern u1="/" u2="ã" k="41" /> +<hkern u1="/" u2="â" k="41" /> +<hkern u1="/" u2="á" k="41" /> +<hkern u1="/" u2="à" k="41" /> +<hkern u1="/" u2="Æ" k="35" /> +<hkern u1="/" u2="Å" k="66" /> +<hkern u1="/" u2="Ä" k="66" /> +<hkern u1="/" u2="Ã" k="66" /> +<hkern u1="/" u2="Â" k="66" /> +<hkern u1="/" u2="Á" k="66" /> +<hkern u1="/" u2="À" k="66" /> +<hkern u1="/" u2="u" k="29" /> +<hkern u1="/" u2="s" k="35" /> +<hkern u1="/" u2="r" k="31" /> +<hkern u1="/" u2="q" k="45" /> +<hkern u1="/" u2="p" k="31" /> +<hkern u1="/" u2="o" k="45" /> +<hkern u1="/" u2="n" k="31" /> +<hkern u1="/" u2="m" k="31" /> +<hkern u1="/" u2="g" k="45" /> +<hkern u1="/" u2="e" k="45" /> +<hkern u1="/" u2="d" k="45" /> +<hkern u1="/" u2="c" k="45" /> +<hkern u1="/" u2="a" k="41" /> +<hkern u1="/" u2="A" k="66" /> +<hkern u1="/" u2="/" k="303" /> +<hkern u1=":" u2="Ý" k="53" /> +<hkern u1=":" u2="Y" k="53" /> +<hkern u1=":" u2="V" k="18" /> +<hkern u1=":" u2="T" k="86" /> +<hkern u1=";" u2="Ý" k="53" /> +<hkern u1=";" u2="Y" k="53" /> +<hkern u1=";" u2="V" k="18" /> +<hkern u1=";" u2="T" k="86" /> +<hkern u1="@" u2="Ý" k="49" /> +<hkern u1="@" u2="Y" k="49" /> +<hkern u1="@" u2="T" k="37" /> +<hkern u1="A" u2="™" k="90" /> +<hkern u1="A" u2="®" k="20" /> +<hkern u1="A" u2="}" k="25" /> +<hkern u1="A" u2="v" k="74" /> +<hkern u1="A" u2="]" k="31" /> +<hkern u1="A" u2="\" k="66" /> +<hkern u1="A" u2="X" k="-49" /> +<hkern u1="A" u2="V" k="90" /> +<hkern u1="A" u2="?" k="37" /> +<hkern u1="A" u2="*" k="84" /> +<hkern u1="B" u2="ffl" k="23" /> +<hkern u1="B" u2="ffi" k="23" /> +<hkern u1="B" u2="fl" k="23" /> +<hkern u1="B" u2="fi" k="23" /> +<hkern u1="B" u2="ÿ" k="20" /> +<hkern u1="B" u2="þ" k="14" /> +<hkern u1="B" u2="ý" k="20" /> +<hkern u1="B" u2="ü" k="14" /> +<hkern u1="B" u2="û" k="14" /> +<hkern u1="B" u2="ú" k="14" /> +<hkern u1="B" u2="ù" k="14" /> +<hkern u1="B" u2="ø" k="10" /> +<hkern u1="B" u2="ö" k="10" /> +<hkern u1="B" u2="õ" k="10" /> +<hkern u1="B" u2="ô" k="10" /> +<hkern u1="B" u2="ó" k="10" /> +<hkern u1="B" u2="ò" k="10" /> +<hkern u1="B" u2="ñ" k="14" /> +<hkern u1="B" u2="ð" k="10" /> +<hkern u1="B" u2="ï" k="16" /> +<hkern u1="B" u2="î" k="16" /> +<hkern u1="B" u2="í" k="16" /> +<hkern u1="B" u2="ì" k="16" /> +<hkern u1="B" u2="ë" k="10" /> +<hkern u1="B" u2="ê" k="10" /> +<hkern u1="B" u2="é" k="10" /> +<hkern u1="B" u2="è" k="10" /> +<hkern u1="B" u2="ç" k="10" /> +<hkern u1="B" u2="ß" k="23" /> +<hkern u1="B" u2="Ý" k="59" /> +<hkern u1="B" u2="Æ" k="16" /> +<hkern u1="B" u2="}" k="29" /> +<hkern u1="B" u2="y" k="20" /> +<hkern u1="B" u2="x" k="37" /> +<hkern u1="B" u2="v" k="27" /> +<hkern u1="B" u2="u" k="14" /> +<hkern u1="B" u2="t" k="29" /> +<hkern u1="B" u2="s" k="18" /> +<hkern u1="B" u2="r" k="14" /> +<hkern u1="B" u2="q" k="10" /> +<hkern u1="B" u2="p" k="14" /> +<hkern u1="B" u2="o" k="10" /> +<hkern u1="B" u2="n" k="14" /> +<hkern u1="B" u2="m" k="14" /> +<hkern u1="B" u2="k" k="14" /> +<hkern u1="B" u2="j" k="16" /> +<hkern u1="B" u2="i" k="16" /> +<hkern u1="B" u2="h" k="14" /> +<hkern u1="B" u2="g" k="10" /> +<hkern u1="B" u2="f" k="23" /> +<hkern u1="B" u2="e" k="10" /> +<hkern u1="B" u2="d" k="10" /> +<hkern u1="B" u2="c" k="10" /> +<hkern u1="B" u2="b" k="14" /> +<hkern u1="B" u2="]" k="29" /> +<hkern u1="B" u2="Y" k="59" /> +<hkern u1="B" u2="X" k="35" /> +<hkern u1="B" u2="V" k="25" /> +<hkern u1="B" u2="T" k="86" /> +<hkern u1="B" u2=")" k="33" /> +<hkern u1="C" u2="ffl" k="14" /> +<hkern u1="C" u2="ffi" k="14" /> +<hkern u1="C" u2="fl" k="14" /> +<hkern u1="C" u2="fi" k="14" /> +<hkern u1="C" u2="—" k="45" /> +<hkern u1="C" u2="–" k="45" /> +<hkern u1="C" u2="ÿ" k="94" /> +<hkern u1="C" u2="ý" k="94" /> +<hkern u1="C" u2="ü" k="23" /> +<hkern u1="C" u2="û" k="23" /> +<hkern u1="C" u2="ú" k="23" /> +<hkern u1="C" u2="ù" k="23" /> +<hkern u1="C" u2="ø" k="33" /> +<hkern u1="C" u2="ö" k="33" /> +<hkern u1="C" u2="õ" k="33" /> +<hkern u1="C" u2="ô" k="33" /> +<hkern u1="C" u2="ó" k="33" /> +<hkern u1="C" u2="ò" k="33" /> +<hkern u1="C" u2="ñ" k="14" /> +<hkern u1="C" u2="ð" k="33" /> +<hkern u1="C" u2="ë" k="33" /> +<hkern u1="C" u2="ê" k="33" /> +<hkern u1="C" u2="é" k="33" /> +<hkern u1="C" u2="è" k="33" /> +<hkern u1="C" u2="ç" k="33" /> +<hkern u1="C" u2="ß" k="14" /> +<hkern u1="C" u2="Ø" k="18" /> +<hkern u1="C" u2="Ö" k="18" /> +<hkern u1="C" u2="Õ" k="18" /> +<hkern u1="C" u2="Ô" k="18" /> +<hkern u1="C" u2="Ó" k="18" /> +<hkern u1="C" u2="Ò" k="18" /> +<hkern u1="C" u2="Ç" k="18" /> +<hkern u1="C" u2="y" k="94" /> +<hkern u1="C" u2="v" k="102" /> +<hkern u1="C" u2="u" k="23" /> +<hkern u1="C" u2="t" k="41" /> +<hkern u1="C" u2="s" k="20" /> +<hkern u1="C" u2="r" k="14" /> +<hkern u1="C" u2="q" k="33" /> +<hkern u1="C" u2="p" k="14" /> +<hkern u1="C" u2="o" k="33" /> +<hkern u1="C" u2="n" k="14" /> +<hkern u1="C" u2="m" k="14" /> +<hkern u1="C" u2="g" k="33" /> +<hkern u1="C" u2="f" k="14" /> +<hkern u1="C" u2="e" k="33" /> +<hkern u1="C" u2="d" k="33" /> +<hkern u1="C" u2="c" k="33" /> +<hkern u1="C" u2="Q" k="18" /> +<hkern u1="C" u2="O" k="18" /> +<hkern u1="C" u2="G" k="18" /> +<hkern u1="C" u2="C" k="18" /> +<hkern u1="C" u2="-" k="45" /> +<hkern u1="C" u2="&" k="14" /> +<hkern u1="D" u2="™" k="16" /> +<hkern u1="D" u2="…" k="39" /> +<hkern u1="D" u2="„" k="39" /> +<hkern u1="D" u2="‚" k="39" /> +<hkern u1="D" u2="þ" k="18" /> +<hkern u1="D" u2="ü" k="16" /> +<hkern u1="D" u2="û" k="16" /> +<hkern u1="D" u2="ú" k="16" /> +<hkern u1="D" u2="ù" k="16" /> +<hkern u1="D" u2="ø" k="12" /> +<hkern u1="D" u2="ö" k="12" /> +<hkern u1="D" u2="õ" k="12" /> +<hkern u1="D" u2="ô" k="12" /> +<hkern u1="D" u2="ó" k="12" /> +<hkern u1="D" u2="ò" k="12" /> +<hkern u1="D" u2="ñ" k="18" /> +<hkern u1="D" u2="ð" k="12" /> +<hkern u1="D" u2="ï" k="20" /> +<hkern u1="D" u2="î" k="20" /> +<hkern u1="D" u2="í" k="20" /> +<hkern u1="D" u2="ì" k="20" /> +<hkern u1="D" u2="ë" k="12" /> +<hkern u1="D" u2="ê" k="12" /> +<hkern u1="D" u2="é" k="12" /> +<hkern u1="D" u2="è" k="12" /> +<hkern u1="D" u2="ç" k="12" /> +<hkern u1="D" u2="æ" k="20" /> +<hkern u1="D" u2="å" k="20" /> +<hkern u1="D" u2="ä" k="20" /> +<hkern u1="D" u2="ã" k="20" /> +<hkern u1="D" u2="â" k="20" /> +<hkern u1="D" u2="á" k="20" /> +<hkern u1="D" u2="à" k="20" /> +<hkern u1="D" u2="Ý" k="68" /> +<hkern u1="D" u2="Æ" k="96" /> +<hkern u1="D" u2="Å" k="31" /> +<hkern u1="D" u2="Ä" k="31" /> +<hkern u1="D" u2="Ã" k="31" /> +<hkern u1="D" u2="Â" k="31" /> +<hkern u1="D" u2="Á" k="31" /> +<hkern u1="D" u2="À" k="31" /> +<hkern u1="D" u2="}" k="37" /> +<hkern u1="D" u2="x" k="27" /> +<hkern u1="D" u2="u" k="16" /> +<hkern u1="D" u2="s" k="12" /> +<hkern u1="D" u2="r" k="18" /> +<hkern u1="D" u2="q" k="12" /> +<hkern u1="D" u2="p" k="18" /> +<hkern u1="D" u2="o" k="12" /> +<hkern u1="D" u2="n" k="18" /> +<hkern u1="D" u2="m" k="18" /> +<hkern u1="D" u2="k" k="18" /> +<hkern u1="D" u2="j" k="20" /> +<hkern u1="D" u2="i" k="20" /> +<hkern u1="D" u2="h" k="18" /> +<hkern u1="D" u2="g" k="12" /> +<hkern u1="D" u2="e" k="12" /> +<hkern u1="D" u2="d" k="12" /> +<hkern u1="D" u2="c" k="12" /> +<hkern u1="D" u2="b" k="18" /> +<hkern u1="D" u2="a" k="20" /> +<hkern u1="D" u2="]" k="37" /> +<hkern u1="D" u2="Y" k="68" /> +<hkern u1="D" u2="X" k="57" /> +<hkern u1="D" u2="V" k="29" /> +<hkern u1="D" u2="T" k="57" /> +<hkern u1="D" u2="A" k="31" /> +<hkern u1="D" u2="/" k="20" /> +<hkern u1="D" u2="." k="39" /> +<hkern u1="D" u2="," k="39" /> +<hkern u1="D" u2=")" k="43" /> +<hkern u1="E" u2="ffl" k="23" /> +<hkern u1="E" u2="ffi" k="23" /> +<hkern u1="E" u2="fl" k="23" /> +<hkern u1="E" u2="fi" k="23" /> +<hkern u1="E" u2="ÿ" k="29" /> +<hkern u1="E" u2="ý" k="29" /> +<hkern u1="E" u2="ü" k="27" /> +<hkern u1="E" u2="û" k="27" /> +<hkern u1="E" u2="ú" k="27" /> +<hkern u1="E" u2="ù" k="27" /> +<hkern u1="E" u2="ø" k="29" /> +<hkern u1="E" u2="ö" k="29" /> +<hkern u1="E" u2="õ" k="29" /> +<hkern u1="E" u2="ô" k="29" /> +<hkern u1="E" u2="ó" k="29" /> +<hkern u1="E" u2="ò" k="29" /> +<hkern u1="E" u2="ñ" k="14" /> +<hkern u1="E" u2="ð" k="29" /> +<hkern u1="E" u2="ë" k="29" /> +<hkern u1="E" u2="ê" k="29" /> +<hkern u1="E" u2="é" k="29" /> +<hkern u1="E" u2="è" k="29" /> +<hkern u1="E" u2="ç" k="29" /> +<hkern u1="E" u2="æ" k="14" /> +<hkern u1="E" u2="å" k="14" /> +<hkern u1="E" u2="ä" k="14" /> +<hkern u1="E" u2="ã" k="14" /> +<hkern u1="E" u2="â" k="14" /> +<hkern u1="E" u2="á" k="14" /> +<hkern u1="E" u2="à" k="14" /> +<hkern u1="E" u2="ß" k="23" /> +<hkern u1="E" u2="Ø" k="14" /> +<hkern u1="E" u2="Ö" k="14" /> +<hkern u1="E" u2="Õ" k="14" /> +<hkern u1="E" u2="Ô" k="14" /> +<hkern u1="E" u2="Ó" k="14" /> +<hkern u1="E" u2="Ò" k="14" /> +<hkern u1="E" u2="Ç" k="14" /> +<hkern u1="E" u2="y" k="29" /> +<hkern u1="E" u2="v" k="33" /> +<hkern u1="E" u2="u" k="27" /> +<hkern u1="E" u2="t" k="35" /> +<hkern u1="E" u2="s" k="12" /> +<hkern u1="E" u2="r" k="14" /> +<hkern u1="E" u2="q" k="29" /> +<hkern u1="E" u2="p" k="14" /> +<hkern u1="E" u2="o" k="29" /> +<hkern u1="E" u2="n" k="14" /> +<hkern u1="E" u2="m" k="14" /> +<hkern u1="E" u2="g" k="29" /> +<hkern u1="E" u2="f" k="23" /> +<hkern u1="E" u2="e" k="29" /> +<hkern u1="E" u2="d" k="29" /> +<hkern u1="E" u2="c" k="29" /> +<hkern u1="E" u2="a" k="14" /> +<hkern u1="E" u2="Q" k="14" /> +<hkern u1="E" u2="O" k="14" /> +<hkern u1="E" u2="G" k="14" /> +<hkern u1="E" u2="C" k="14" /> +<hkern u1="E" u2="&" k="14" /> +<hkern u1="F" u2="ffl" k="37" /> +<hkern u1="F" u2="ffi" k="37" /> +<hkern u1="F" u2="fl" k="37" /> +<hkern u1="F" u2="fi" k="37" /> +<hkern u1="F" u2="›" k="27" /> +<hkern u1="F" u2="…" k="145" /> +<hkern u1="F" u2="„" k="145" /> +<hkern u1="F" u2="‚" k="145" /> +<hkern u1="F" u2="ÿ" k="27" /> +<hkern u1="F" u2="þ" k="14" /> +<hkern u1="F" u2="ý" k="27" /> +<hkern u1="F" u2="ü" k="49" /> +<hkern u1="F" u2="û" k="49" /> +<hkern u1="F" u2="ú" k="49" /> +<hkern u1="F" u2="ù" k="49" /> +<hkern u1="F" u2="ø" k="41" /> +<hkern u1="F" u2="ö" k="41" /> +<hkern u1="F" u2="õ" k="41" /> +<hkern u1="F" u2="ô" k="41" /> +<hkern u1="F" u2="ó" k="41" /> +<hkern u1="F" u2="ò" k="41" /> +<hkern u1="F" u2="ñ" k="55" /> +<hkern u1="F" u2="ð" k="41" /> +<hkern u1="F" u2="ï" k="23" /> +<hkern u1="F" u2="î" k="23" /> +<hkern u1="F" u2="í" k="23" /> +<hkern u1="F" u2="ì" k="23" /> +<hkern u1="F" u2="ë" k="41" /> +<hkern u1="F" u2="ê" k="41" /> +<hkern u1="F" u2="é" k="41" /> +<hkern u1="F" u2="è" k="41" /> +<hkern u1="F" u2="ç" k="41" /> +<hkern u1="F" u2="æ" k="156" /> +<hkern u1="F" u2="å" k="156" /> +<hkern u1="F" u2="ä" k="156" /> +<hkern u1="F" u2="ã" k="156" /> +<hkern u1="F" u2="â" k="156" /> +<hkern u1="F" u2="á" k="156" /> +<hkern u1="F" u2="à" k="156" /> +<hkern u1="F" u2="ß" k="37" /> +<hkern u1="F" u2="Æ" k="162" /> +<hkern u1="F" u2="Å" k="106" /> +<hkern u1="F" u2="Ä" k="106" /> +<hkern u1="F" u2="Ã" k="106" /> +<hkern u1="F" u2="Â" k="106" /> +<hkern u1="F" u2="Á" k="106" /> +<hkern u1="F" u2="À" k="106" /> +<hkern u1="F" u2="»" k="27" /> +<hkern u1="F" u2="y" k="27" /> +<hkern u1="F" u2="x" k="88" /> +<hkern u1="F" u2="v" k="31" /> +<hkern u1="F" u2="u" k="49" /> +<hkern u1="F" u2="t" k="55" /> +<hkern u1="F" u2="s" k="41" /> +<hkern u1="F" u2="r" k="55" /> +<hkern u1="F" u2="q" k="41" /> +<hkern u1="F" u2="p" k="55" /> +<hkern u1="F" u2="o" k="41" /> +<hkern u1="F" u2="n" k="55" /> +<hkern u1="F" u2="m" k="55" /> +<hkern u1="F" u2="k" k="14" /> +<hkern u1="F" u2="j" k="23" /> +<hkern u1="F" u2="i" k="23" /> +<hkern u1="F" u2="h" k="14" /> +<hkern u1="F" u2="g" k="41" /> +<hkern u1="F" u2="f" k="37" /> +<hkern u1="F" u2="e" k="41" /> +<hkern u1="F" u2="d" k="41" /> +<hkern u1="F" u2="c" k="41" /> +<hkern u1="F" u2="b" k="14" /> +<hkern u1="F" u2="a" k="156" /> +<hkern u1="F" u2="A" k="106" /> +<hkern u1="F" u2="/" k="51" /> +<hkern u1="F" u2="." k="145" /> +<hkern u1="F" u2="," k="145" /> +<hkern u1="F" u2="&" k="47" /> +<hkern u1="H" u2="ffl" k="16" /> +<hkern u1="H" u2="ffi" k="16" /> +<hkern u1="H" u2="fl" k="16" /> +<hkern u1="H" u2="fi" k="16" /> +<hkern u1="H" u2="ÿ" k="14" /> +<hkern u1="H" u2="þ" k="20" /> +<hkern u1="H" u2="ý" k="14" /> +<hkern u1="H" u2="ü" k="27" /> +<hkern u1="H" u2="û" k="27" /> +<hkern u1="H" u2="ú" k="27" /> +<hkern u1="H" u2="ù" k="27" /> +<hkern u1="H" u2="ø" k="29" /> +<hkern u1="H" u2="ö" k="29" /> +<hkern u1="H" u2="õ" k="29" /> +<hkern u1="H" u2="ô" k="29" /> +<hkern u1="H" u2="ó" k="29" /> +<hkern u1="H" u2="ò" k="29" /> +<hkern u1="H" u2="ñ" k="20" /> +<hkern u1="H" u2="ð" k="29" /> +<hkern u1="H" u2="ï" k="20" /> +<hkern u1="H" u2="î" k="20" /> +<hkern u1="H" u2="í" k="20" /> +<hkern u1="H" u2="ì" k="20" /> +<hkern u1="H" u2="ë" k="29" /> +<hkern u1="H" u2="ê" k="29" /> +<hkern u1="H" u2="é" k="29" /> +<hkern u1="H" u2="è" k="29" /> +<hkern u1="H" u2="ç" k="29" /> +<hkern u1="H" u2="æ" k="23" /> +<hkern u1="H" u2="å" k="23" /> +<hkern u1="H" u2="ä" k="23" /> +<hkern u1="H" u2="ã" k="23" /> +<hkern u1="H" u2="â" k="23" /> +<hkern u1="H" u2="á" k="23" /> +<hkern u1="H" u2="à" k="23" /> +<hkern u1="H" u2="ß" k="16" /> +<hkern u1="H" u2="Ý" k="10" /> +<hkern u1="H" u2="y" k="14" /> +<hkern u1="H" u2="v" k="18" /> +<hkern u1="H" u2="u" k="27" /> +<hkern u1="H" u2="t" k="23" /> +<hkern u1="H" u2="s" k="23" /> +<hkern u1="H" u2="r" k="20" /> +<hkern u1="H" u2="q" k="29" /> +<hkern u1="H" u2="p" k="20" /> +<hkern u1="H" u2="o" k="29" /> +<hkern u1="H" u2="n" k="20" /> +<hkern u1="H" u2="m" k="20" /> +<hkern u1="H" u2="k" k="20" /> +<hkern u1="H" u2="j" k="20" /> +<hkern u1="H" u2="i" k="20" /> +<hkern u1="H" u2="h" k="20" /> +<hkern u1="H" u2="g" k="29" /> +<hkern u1="H" u2="f" k="16" /> +<hkern u1="H" u2="e" k="29" /> +<hkern u1="H" u2="d" k="29" /> +<hkern u1="H" u2="c" k="29" /> +<hkern u1="H" u2="b" k="20" /> +<hkern u1="H" u2="a" k="23" /> +<hkern u1="H" u2="Y" k="10" /> +<hkern u1="I" u2="ffl" k="16" /> +<hkern u1="I" u2="ffi" k="16" /> +<hkern u1="I" u2="fl" k="16" /> +<hkern u1="I" u2="fi" k="16" /> +<hkern u1="I" u2="ÿ" k="14" /> +<hkern u1="I" u2="þ" k="20" /> +<hkern u1="I" u2="ý" k="14" /> +<hkern u1="I" u2="ü" k="27" /> +<hkern u1="I" u2="û" k="27" /> +<hkern u1="I" u2="ú" k="27" /> +<hkern u1="I" u2="ù" k="27" /> +<hkern u1="I" u2="ø" k="29" /> +<hkern u1="I" u2="ö" k="29" /> +<hkern u1="I" u2="õ" k="29" /> +<hkern u1="I" u2="ô" k="29" /> +<hkern u1="I" u2="ó" k="29" /> +<hkern u1="I" u2="ò" k="29" /> +<hkern u1="I" u2="ñ" k="20" /> +<hkern u1="I" u2="ð" k="29" /> +<hkern u1="I" u2="ï" k="20" /> +<hkern u1="I" u2="î" k="20" /> +<hkern u1="I" u2="í" k="20" /> +<hkern u1="I" u2="ì" k="20" /> +<hkern u1="I" u2="ë" k="29" /> +<hkern u1="I" u2="ê" k="29" /> +<hkern u1="I" u2="é" k="29" /> +<hkern u1="I" u2="è" k="29" /> +<hkern u1="I" u2="ç" k="29" /> +<hkern u1="I" u2="æ" k="23" /> +<hkern u1="I" u2="å" k="23" /> +<hkern u1="I" u2="ä" k="23" /> +<hkern u1="I" u2="ã" k="23" /> +<hkern u1="I" u2="â" k="23" /> +<hkern u1="I" u2="á" k="23" /> +<hkern u1="I" u2="à" k="23" /> +<hkern u1="I" u2="ß" k="16" /> +<hkern u1="I" u2="Ý" k="10" /> +<hkern u1="I" u2="y" k="14" /> +<hkern u1="I" u2="v" k="18" /> +<hkern u1="I" u2="u" k="27" /> +<hkern u1="I" u2="t" k="23" /> +<hkern u1="I" u2="s" k="23" /> +<hkern u1="I" u2="r" k="20" /> +<hkern u1="I" u2="q" k="29" /> +<hkern u1="I" u2="p" k="20" /> +<hkern u1="I" u2="o" k="29" /> +<hkern u1="I" u2="n" k="20" /> +<hkern u1="I" u2="m" k="20" /> +<hkern u1="I" u2="k" k="20" /> +<hkern u1="I" u2="j" k="20" /> +<hkern u1="I" u2="i" k="20" /> +<hkern u1="I" u2="h" k="20" /> +<hkern u1="I" u2="g" k="29" /> +<hkern u1="I" u2="f" k="16" /> +<hkern u1="I" u2="e" k="29" /> +<hkern u1="I" u2="d" k="29" /> +<hkern u1="I" u2="c" k="29" /> +<hkern u1="I" u2="b" k="20" /> +<hkern u1="I" u2="a" k="23" /> +<hkern u1="I" u2="Y" k="10" /> +<hkern u1="M" u2="ffl" k="16" /> +<hkern u1="M" u2="ffi" k="16" /> +<hkern u1="M" u2="fl" k="16" /> +<hkern u1="M" u2="fi" k="16" /> +<hkern u1="M" u2="ÿ" k="14" /> +<hkern u1="M" u2="þ" k="20" /> +<hkern u1="M" u2="ý" k="14" /> +<hkern u1="M" u2="ü" k="27" /> +<hkern u1="M" u2="û" k="27" /> +<hkern u1="M" u2="ú" k="27" /> +<hkern u1="M" u2="ù" k="27" /> +<hkern u1="M" u2="ø" k="29" /> +<hkern u1="M" u2="ö" k="29" /> +<hkern u1="M" u2="õ" k="29" /> +<hkern u1="M" u2="ô" k="29" /> +<hkern u1="M" u2="ó" k="29" /> +<hkern u1="M" u2="ò" k="29" /> +<hkern u1="M" u2="ñ" k="20" /> +<hkern u1="M" u2="ð" k="29" /> +<hkern u1="M" u2="ï" k="20" /> +<hkern u1="M" u2="î" k="20" /> +<hkern u1="M" u2="í" k="20" /> +<hkern u1="M" u2="ì" k="20" /> +<hkern u1="M" u2="ë" k="29" /> +<hkern u1="M" u2="ê" k="29" /> +<hkern u1="M" u2="é" k="29" /> +<hkern u1="M" u2="è" k="29" /> +<hkern u1="M" u2="ç" k="29" /> +<hkern u1="M" u2="æ" k="23" /> +<hkern u1="M" u2="å" k="23" /> +<hkern u1="M" u2="ä" k="23" /> +<hkern u1="M" u2="ã" k="23" /> +<hkern u1="M" u2="â" k="23" /> +<hkern u1="M" u2="á" k="23" /> +<hkern u1="M" u2="à" k="23" /> +<hkern u1="M" u2="ß" k="16" /> +<hkern u1="M" u2="Ý" k="10" /> +<hkern u1="M" u2="y" k="14" /> +<hkern u1="M" u2="v" k="18" /> +<hkern u1="M" u2="u" k="27" /> +<hkern u1="M" u2="t" k="23" /> +<hkern u1="M" u2="s" k="23" /> +<hkern u1="M" u2="r" k="20" /> +<hkern u1="M" u2="q" k="29" /> +<hkern u1="M" u2="p" k="20" /> +<hkern u1="M" u2="o" k="29" /> +<hkern u1="M" u2="n" k="20" /> +<hkern u1="M" u2="m" k="20" /> +<hkern u1="M" u2="k" k="20" /> +<hkern u1="M" u2="j" k="20" /> +<hkern u1="M" u2="i" k="20" /> +<hkern u1="M" u2="h" k="20" /> +<hkern u1="M" u2="g" k="29" /> +<hkern u1="M" u2="f" k="16" /> +<hkern u1="M" u2="e" k="29" /> +<hkern u1="M" u2="d" k="29" /> +<hkern u1="M" u2="c" k="29" /> +<hkern u1="M" u2="b" k="20" /> +<hkern u1="M" u2="a" k="23" /> +<hkern u1="M" u2="Y" k="10" /> +<hkern u1="N" u2="ffl" k="16" /> +<hkern u1="N" u2="ffi" k="16" /> +<hkern u1="N" u2="fl" k="16" /> +<hkern u1="N" u2="fi" k="16" /> +<hkern u1="N" u2="ÿ" k="14" /> +<hkern u1="N" u2="þ" k="20" /> +<hkern u1="N" u2="ý" k="14" /> +<hkern u1="N" u2="ü" k="27" /> +<hkern u1="N" u2="û" k="27" /> +<hkern u1="N" u2="ú" k="27" /> +<hkern u1="N" u2="ù" k="27" /> +<hkern u1="N" u2="ø" k="29" /> +<hkern u1="N" u2="ö" k="29" /> +<hkern u1="N" u2="õ" k="29" /> +<hkern u1="N" u2="ô" k="29" /> +<hkern u1="N" u2="ó" k="29" /> +<hkern u1="N" u2="ò" k="29" /> +<hkern u1="N" u2="ñ" k="20" /> +<hkern u1="N" u2="ð" k="29" /> +<hkern u1="N" u2="ï" k="20" /> +<hkern u1="N" u2="î" k="20" /> +<hkern u1="N" u2="í" k="20" /> +<hkern u1="N" u2="ì" k="20" /> +<hkern u1="N" u2="ë" k="29" /> +<hkern u1="N" u2="ê" k="29" /> +<hkern u1="N" u2="é" k="29" /> +<hkern u1="N" u2="è" k="29" /> +<hkern u1="N" u2="ç" k="29" /> +<hkern u1="N" u2="æ" k="23" /> +<hkern u1="N" u2="å" k="23" /> +<hkern u1="N" u2="ä" k="23" /> +<hkern u1="N" u2="ã" k="23" /> +<hkern u1="N" u2="â" k="23" /> +<hkern u1="N" u2="á" k="23" /> +<hkern u1="N" u2="à" k="23" /> +<hkern u1="N" u2="ß" k="16" /> +<hkern u1="N" u2="Ý" k="10" /> +<hkern u1="N" u2="y" k="14" /> +<hkern u1="N" u2="v" k="18" /> +<hkern u1="N" u2="u" k="27" /> +<hkern u1="N" u2="t" k="23" /> +<hkern u1="N" u2="s" k="23" /> +<hkern u1="N" u2="r" k="20" /> +<hkern u1="N" u2="q" k="29" /> +<hkern u1="N" u2="p" k="20" /> +<hkern u1="N" u2="o" k="29" /> +<hkern u1="N" u2="n" k="20" /> +<hkern u1="N" u2="m" k="20" /> +<hkern u1="N" u2="k" k="20" /> +<hkern u1="N" u2="j" k="20" /> +<hkern u1="N" u2="i" k="20" /> +<hkern u1="N" u2="h" k="20" /> +<hkern u1="N" u2="g" k="29" /> +<hkern u1="N" u2="f" k="16" /> +<hkern u1="N" u2="e" k="29" /> +<hkern u1="N" u2="d" k="29" /> +<hkern u1="N" u2="c" k="29" /> +<hkern u1="N" u2="b" k="20" /> +<hkern u1="N" u2="a" k="23" /> +<hkern u1="N" u2="Y" k="10" /> +<hkern u1="O" u2="™" k="16" /> +<hkern u1="O" u2="…" k="39" /> +<hkern u1="O" u2="„" k="39" /> +<hkern u1="O" u2="‚" k="39" /> +<hkern u1="O" u2="þ" k="18" /> +<hkern u1="O" u2="ü" k="16" /> +<hkern u1="O" u2="û" k="16" /> +<hkern u1="O" u2="ú" k="16" /> +<hkern u1="O" u2="ù" k="16" /> +<hkern u1="O" u2="ø" k="12" /> +<hkern u1="O" u2="ö" k="12" /> +<hkern u1="O" u2="õ" k="12" /> +<hkern u1="O" u2="ô" k="12" /> +<hkern u1="O" u2="ó" k="12" /> +<hkern u1="O" u2="ò" k="12" /> +<hkern u1="O" u2="ñ" k="18" /> +<hkern u1="O" u2="ð" k="12" /> +<hkern u1="O" u2="ï" k="20" /> +<hkern u1="O" u2="î" k="20" /> +<hkern u1="O" u2="í" k="20" /> +<hkern u1="O" u2="ì" k="20" /> +<hkern u1="O" u2="ë" k="12" /> +<hkern u1="O" u2="ê" k="12" /> +<hkern u1="O" u2="é" k="12" /> +<hkern u1="O" u2="è" k="12" /> +<hkern u1="O" u2="ç" k="12" /> +<hkern u1="O" u2="æ" k="20" /> +<hkern u1="O" u2="å" k="20" /> +<hkern u1="O" u2="ä" k="20" /> +<hkern u1="O" u2="ã" k="20" /> +<hkern u1="O" u2="â" k="20" /> +<hkern u1="O" u2="á" k="20" /> +<hkern u1="O" u2="à" k="20" /> +<hkern u1="O" u2="Ý" k="63" /> +<hkern u1="O" u2="Æ" k="90" /> +<hkern u1="O" u2="Å" k="29" /> +<hkern u1="O" u2="Ä" k="29" /> +<hkern u1="O" u2="Ã" k="29" /> +<hkern u1="O" u2="Â" k="29" /> +<hkern u1="O" u2="Á" k="29" /> +<hkern u1="O" u2="À" k="29" /> +<hkern u1="O" u2="}" k="35" /> +<hkern u1="O" u2="x" k="27" /> +<hkern u1="O" u2="u" k="16" /> +<hkern u1="O" u2="s" k="12" /> +<hkern u1="O" u2="r" k="18" /> +<hkern u1="O" u2="q" k="12" /> +<hkern u1="O" u2="p" k="18" /> +<hkern u1="O" u2="o" k="12" /> +<hkern u1="O" u2="n" k="18" /> +<hkern u1="O" u2="m" k="18" /> +<hkern u1="O" u2="k" k="18" /> +<hkern u1="O" u2="j" k="20" /> +<hkern u1="O" u2="i" k="20" /> +<hkern u1="O" u2="h" k="18" /> +<hkern u1="O" u2="g" k="12" /> +<hkern u1="O" u2="e" k="12" /> +<hkern u1="O" u2="d" k="12" /> +<hkern u1="O" u2="c" k="12" /> +<hkern u1="O" u2="b" k="18" /> +<hkern u1="O" u2="a" k="20" /> +<hkern u1="O" u2="]" k="37" /> +<hkern u1="O" u2="Y" k="63" /> +<hkern u1="O" u2="X" k="53" /> +<hkern u1="O" u2="V" k="27" /> +<hkern u1="O" u2="T" k="49" /> +<hkern u1="O" u2="A" k="29" /> +<hkern u1="O" u2="." k="39" /> +<hkern u1="O" u2="," k="39" /> +<hkern u1="O" u2=")" k="43" /> +<hkern u1="P" u2="…" k="160" /> +<hkern u1="P" u2="„" k="160" /> +<hkern u1="P" u2="‚" k="160" /> +<hkern u1="P" u2="þ" k="12" /> +<hkern u1="P" u2="ü" k="14" /> +<hkern u1="P" u2="û" k="14" /> +<hkern u1="P" u2="ú" k="14" /> +<hkern u1="P" u2="ù" k="14" /> +<hkern u1="P" u2="ø" k="29" /> +<hkern u1="P" u2="ö" k="29" /> +<hkern u1="P" u2="õ" k="29" /> +<hkern u1="P" u2="ô" k="29" /> +<hkern u1="P" u2="ó" k="29" /> +<hkern u1="P" u2="ò" k="29" /> +<hkern u1="P" u2="ñ" k="16" /> +<hkern u1="P" u2="ð" k="29" /> +<hkern u1="P" u2="ï" k="16" /> +<hkern u1="P" u2="î" k="4" /> +<hkern u1="P" u2="í" k="16" /> +<hkern u1="P" u2="ì" k="16" /> +<hkern u1="P" u2="ë" k="29" /> +<hkern u1="P" u2="ê" k="29" /> +<hkern u1="P" u2="é" k="29" /> +<hkern u1="P" u2="è" k="29" /> +<hkern u1="P" u2="ç" k="29" /> +<hkern u1="P" u2="æ" k="53" /> +<hkern u1="P" u2="å" k="53" /> +<hkern u1="P" u2="ä" k="53" /> +<hkern u1="P" u2="ã" k="53" /> +<hkern u1="P" u2="â" k="53" /> +<hkern u1="P" u2="á" k="53" /> +<hkern u1="P" u2="à" k="53" /> +<hkern u1="P" u2="Ý" k="10" /> +<hkern u1="P" u2="Æ" k="162" /> +<hkern u1="P" u2="Å" k="90" /> +<hkern u1="P" u2="Ä" k="90" /> +<hkern u1="P" u2="Ã" k="90" /> +<hkern u1="P" u2="Â" k="90" /> +<hkern u1="P" u2="Á" k="90" /> +<hkern u1="P" u2="À" k="90" /> +<hkern u1="P" u2="}" k="20" /> +<hkern u1="P" u2="u" k="14" /> +<hkern u1="P" u2="s" k="14" /> +<hkern u1="P" u2="r" k="16" /> +<hkern u1="P" u2="q" k="29" /> +<hkern u1="P" u2="p" k="16" /> +<hkern u1="P" u2="o" k="29" /> +<hkern u1="P" u2="n" k="16" /> +<hkern u1="P" u2="m" k="16" /> +<hkern u1="P" u2="k" k="12" /> +<hkern u1="P" u2="j" k="16" /> +<hkern u1="P" u2="i" k="16" /> +<hkern u1="P" u2="h" k="12" /> +<hkern u1="P" u2="g" k="29" /> +<hkern u1="P" u2="e" k="29" /> +<hkern u1="P" u2="d" k="29" /> +<hkern u1="P" u2="c" k="29" /> +<hkern u1="P" u2="b" k="12" /> +<hkern u1="P" u2="a" k="53" /> +<hkern u1="P" u2="Y" k="10" /> +<hkern u1="P" u2="X" k="41" /> +<hkern u1="P" u2="A" k="90" /> +<hkern u1="P" u2="/" k="47" /> +<hkern u1="P" u2="." k="160" /> +<hkern u1="P" u2="," k="160" /> +<hkern u1="P" u2=")" k="27" /> +<hkern u1="P" u2="&" k="14" /> +<hkern u1="Q" u2="™" k="16" /> +<hkern u1="Q" u2="…" k="39" /> +<hkern u1="Q" u2="„" k="39" /> +<hkern u1="Q" u2="‚" k="39" /> +<hkern u1="Q" u2="þ" k="18" /> +<hkern u1="Q" u2="ü" k="16" /> +<hkern u1="Q" u2="û" k="16" /> +<hkern u1="Q" u2="ú" k="16" /> +<hkern u1="Q" u2="ù" k="16" /> +<hkern u1="Q" u2="ø" k="12" /> +<hkern u1="Q" u2="ö" k="12" /> +<hkern u1="Q" u2="õ" k="12" /> +<hkern u1="Q" u2="ô" k="12" /> +<hkern u1="Q" u2="ó" k="12" /> +<hkern u1="Q" u2="ò" k="12" /> +<hkern u1="Q" u2="ñ" k="18" /> +<hkern u1="Q" u2="ð" k="12" /> +<hkern u1="Q" u2="ï" k="20" /> +<hkern u1="Q" u2="î" k="20" /> +<hkern u1="Q" u2="í" k="20" /> +<hkern u1="Q" u2="ì" k="20" /> +<hkern u1="Q" u2="ë" k="12" /> +<hkern u1="Q" u2="ê" k="12" /> +<hkern u1="Q" u2="é" k="12" /> +<hkern u1="Q" u2="è" k="12" /> +<hkern u1="Q" u2="ç" k="12" /> +<hkern u1="Q" u2="æ" k="20" /> +<hkern u1="Q" u2="å" k="20" /> +<hkern u1="Q" u2="ä" k="20" /> +<hkern u1="Q" u2="ã" k="20" /> +<hkern u1="Q" u2="â" k="20" /> +<hkern u1="Q" u2="á" k="20" /> +<hkern u1="Q" u2="à" k="20" /> +<hkern u1="Q" u2="Ý" k="63" /> +<hkern u1="Q" u2="Æ" k="90" /> +<hkern u1="Q" u2="Å" k="29" /> +<hkern u1="Q" u2="Ä" k="29" /> +<hkern u1="Q" u2="Ã" k="29" /> +<hkern u1="Q" u2="Â" k="29" /> +<hkern u1="Q" u2="Á" k="29" /> +<hkern u1="Q" u2="À" k="29" /> +<hkern u1="Q" u2="}" k="35" /> +<hkern u1="Q" u2="x" k="27" /> +<hkern u1="Q" u2="u" k="16" /> +<hkern u1="Q" u2="s" k="12" /> +<hkern u1="Q" u2="r" k="18" /> +<hkern u1="Q" u2="q" k="12" /> +<hkern u1="Q" u2="p" k="18" /> +<hkern u1="Q" u2="o" k="12" /> +<hkern u1="Q" u2="n" k="18" /> +<hkern u1="Q" u2="m" k="18" /> +<hkern u1="Q" u2="k" k="18" /> +<hkern u1="Q" u2="j" k="20" /> +<hkern u1="Q" u2="i" k="20" /> +<hkern u1="Q" u2="h" k="18" /> +<hkern u1="Q" u2="g" k="12" /> +<hkern u1="Q" u2="e" k="12" /> +<hkern u1="Q" u2="d" k="12" /> +<hkern u1="Q" u2="c" k="12" /> +<hkern u1="Q" u2="b" k="18" /> +<hkern u1="Q" u2="a" k="20" /> +<hkern u1="Q" u2="]" k="37" /> +<hkern u1="Q" u2="Y" k="63" /> +<hkern u1="Q" u2="X" k="53" /> +<hkern u1="Q" u2="V" k="27" /> +<hkern u1="Q" u2="T" k="49" /> +<hkern u1="Q" u2="A" k="29" /> +<hkern u1="Q" u2="." k="39" /> +<hkern u1="Q" u2="," k="39" /> +<hkern u1="Q" u2=")" k="43" /> +<hkern u1="S" u2="ffl" k="53" /> +<hkern u1="S" u2="ffi" k="53" /> +<hkern u1="S" u2="fl" k="53" /> +<hkern u1="S" u2="fi" k="53" /> +<hkern u1="S" u2="™" k="16" /> +<hkern u1="S" u2="ÿ" k="59" /> +<hkern u1="S" u2="þ" k="16" /> +<hkern u1="S" u2="ý" k="59" /> +<hkern u1="S" u2="ü" k="18" /> +<hkern u1="S" u2="û" k="18" /> +<hkern u1="S" u2="ú" k="18" /> +<hkern u1="S" u2="ù" k="18" /> +<hkern u1="S" u2="ñ" k="16" /> +<hkern u1="S" u2="ï" k="18" /> +<hkern u1="S" u2="î" k="18" /> +<hkern u1="S" u2="í" k="18" /> +<hkern u1="S" u2="ì" k="18" /> +<hkern u1="S" u2="ß" k="53" /> +<hkern u1="S" u2="Ý" k="16" /> +<hkern u1="S" u2="y" k="59" /> +<hkern u1="S" u2="x" k="43" /> +<hkern u1="S" u2="v" k="66" /> +<hkern u1="S" u2="u" k="18" /> +<hkern u1="S" u2="t" k="45" /> +<hkern u1="S" u2="s" k="14" /> +<hkern u1="S" u2="r" k="16" /> +<hkern u1="S" u2="p" k="16" /> +<hkern u1="S" u2="n" k="16" /> +<hkern u1="S" u2="m" k="16" /> +<hkern u1="S" u2="k" k="16" /> +<hkern u1="S" u2="j" k="18" /> +<hkern u1="S" u2="i" k="18" /> +<hkern u1="S" u2="h" k="16" /> +<hkern u1="S" u2="f" k="53" /> +<hkern u1="S" u2="b" k="16" /> +<hkern u1="S" u2="Y" k="16" /> +<hkern u1="S" u2="X" k="14" /> +<hkern u1="S" u2="V" k="12" /> +<hkern u1="S" u2="T" k="76" /> +<hkern u1="S" u2="*" k="25" /> +<hkern u1="T" u2="ffl" k="61" /> +<hkern u1="T" u2="ffi" k="61" /> +<hkern u1="T" u2="fl" k="61" /> +<hkern u1="T" u2="fi" k="61" /> +<hkern u1="T" u2="›" k="104" /> +<hkern u1="T" u2="‹" k="121" /> +<hkern u1="T" u2="…" k="131" /> +<hkern u1="T" u2="„" k="131" /> +<hkern u1="T" u2="‚" k="131" /> +<hkern u1="T" u2="—" k="131" /> +<hkern u1="T" u2="–" k="131" /> +<hkern u1="T" u2="ÿ" k="141" /> +<hkern u1="T" u2="þ" k="12" /> +<hkern u1="T" u2="ý" k="141" /> +<hkern u1="T" u2="ü" k="135" /> +<hkern u1="T" u2="û" k="135" /> +<hkern u1="T" u2="ú" k="135" /> +<hkern u1="T" u2="ù" k="135" /> +<hkern u1="T" u2="ø" k="174" /> +<hkern u1="T" u2="ö" k="174" /> +<hkern u1="T" u2="õ" k="174" /> +<hkern u1="T" u2="ô" k="174" /> +<hkern u1="T" u2="ó" k="174" /> +<hkern u1="T" u2="ò" k="174" /> +<hkern u1="T" u2="ñ" k="137" /> +<hkern u1="T" u2="ð" k="174" /> +<hkern u1="T" u2="ï" k="-31" /> +<hkern u1="T" u2="î" k="-2" /> +<hkern u1="T" u2="í" k="20" /> +<hkern u1="T" u2="ì" k="20" /> +<hkern u1="T" u2="ë" k="174" /> +<hkern u1="T" u2="ê" k="174" /> +<hkern u1="T" u2="é" k="174" /> +<hkern u1="T" u2="è" k="174" /> +<hkern u1="T" u2="ç" k="174" /> +<hkern u1="T" u2="æ" k="162" /> +<hkern u1="T" u2="å" k="162" /> +<hkern u1="T" u2="ä" k="162" /> +<hkern u1="T" u2="ã" k="162" /> +<hkern u1="T" u2="â" k="162" /> +<hkern u1="T" u2="á" k="162" /> +<hkern u1="T" u2="à" k="162" /> +<hkern u1="T" u2="ß" k="61" /> +<hkern u1="T" u2="Ý" k="-88" /> +<hkern u1="T" u2="Ø" k="49" /> +<hkern u1="T" u2="Ö" k="49" /> +<hkern u1="T" u2="Õ" k="49" /> +<hkern u1="T" u2="Ô" k="49" /> +<hkern u1="T" u2="Ó" k="49" /> +<hkern u1="T" u2="Ò" k="49" /> +<hkern u1="T" u2="Ç" k="49" /> +<hkern u1="T" u2="Æ" k="109" /> +<hkern u1="T" u2="Å" k="127" /> +<hkern u1="T" u2="Ä" k="127" /> +<hkern u1="T" u2="Ã" k="127" /> +<hkern u1="T" u2="Â" k="127" /> +<hkern u1="T" u2="Á" k="127" /> +<hkern u1="T" u2="À" k="127" /> +<hkern u1="T" u2="»" k="104" /> +<hkern u1="T" u2="®" k="33" /> +<hkern u1="T" u2="«" k="121" /> +<hkern u1="T" u2="y" k="141" /> +<hkern u1="T" u2="x" k="139" /> +<hkern u1="T" u2="v" k="145" /> +<hkern u1="T" u2="u" k="135" /> +<hkern u1="T" u2="t" k="129" /> +<hkern u1="T" u2="s" k="156" /> +<hkern u1="T" u2="r" k="137" /> +<hkern u1="T" u2="q" k="174" /> +<hkern u1="T" u2="p" k="137" /> +<hkern u1="T" u2="o" k="174" /> +<hkern u1="T" u2="n" k="137" /> +<hkern u1="T" u2="m" k="137" /> +<hkern u1="T" u2="k" k="12" /> +<hkern u1="T" u2="j" k="20" /> +<hkern u1="T" u2="i" k="20" /> +<hkern u1="T" u2="h" k="12" /> +<hkern u1="T" u2="g" k="174" /> +<hkern u1="T" u2="f" k="61" /> +<hkern u1="T" u2="e" k="174" /> +<hkern u1="T" u2="d" k="174" /> +<hkern u1="T" u2="c" k="174" /> +<hkern u1="T" u2="b" k="12" /> +<hkern u1="T" u2="a" k="162" /> +<hkern u1="T" u2="Y" k="-88" /> +<hkern u1="T" u2="X" k="-72" /> +<hkern u1="T" u2="V" k="-76" /> +<hkern u1="T" u2="Q" k="49" /> +<hkern u1="T" u2="O" k="49" /> +<hkern u1="T" u2="G" k="49" /> +<hkern u1="T" u2="C" k="49" /> +<hkern u1="T" u2="A" k="127" /> +<hkern u1="T" u2="@" k="61" /> +<hkern u1="T" u2=";" k="86" /> +<hkern u1="T" u2=":" k="86" /> +<hkern u1="T" u2="/" k="74" /> +<hkern u1="T" u2="." k="131" /> +<hkern u1="T" u2="-" k="131" /> +<hkern u1="T" u2="," k="131" /> +<hkern u1="T" u2="&" k="84" /> +<hkern u1="U" u2="ffl" k="16" /> +<hkern u1="U" u2="ffi" k="16" /> +<hkern u1="U" u2="fl" k="16" /> +<hkern u1="U" u2="fi" k="16" /> +<hkern u1="U" u2="…" k="37" /> +<hkern u1="U" u2="„" k="37" /> +<hkern u1="U" u2="‚" k="37" /> +<hkern u1="U" u2="ÿ" k="12" /> +<hkern u1="U" u2="þ" k="27" /> +<hkern u1="U" u2="ý" k="12" /> +<hkern u1="U" u2="ü" k="37" /> +<hkern u1="U" u2="û" k="37" /> +<hkern u1="U" u2="ú" k="37" /> +<hkern u1="U" u2="ù" k="37" /> +<hkern u1="U" u2="ø" k="31" /> +<hkern u1="U" u2="ö" k="31" /> +<hkern u1="U" u2="õ" k="31" /> +<hkern u1="U" u2="ô" k="31" /> +<hkern u1="U" u2="ó" k="31" /> +<hkern u1="U" u2="ò" k="31" /> +<hkern u1="U" u2="ñ" k="37" /> +<hkern u1="U" u2="ð" k="31" /> +<hkern u1="U" u2="ï" k="31" /> +<hkern u1="U" u2="î" k="31" /> +<hkern u1="U" u2="í" k="31" /> +<hkern u1="U" u2="ì" k="31" /> +<hkern u1="U" u2="ë" k="31" /> +<hkern u1="U" u2="ê" k="31" /> +<hkern u1="U" u2="é" k="31" /> +<hkern u1="U" u2="è" k="31" /> +<hkern u1="U" u2="ç" k="31" /> +<hkern u1="U" u2="æ" k="35" /> +<hkern u1="U" u2="å" k="35" /> +<hkern u1="U" u2="ä" k="35" /> +<hkern u1="U" u2="ã" k="35" /> +<hkern u1="U" u2="â" k="35" /> +<hkern u1="U" u2="á" k="35" /> +<hkern u1="U" u2="à" k="35" /> +<hkern u1="U" u2="ß" k="16" /> +<hkern u1="U" u2="Æ" k="20" /> +<hkern u1="U" u2="Å" k="41" /> +<hkern u1="U" u2="Ä" k="41" /> +<hkern u1="U" u2="Ã" k="41" /> +<hkern u1="U" u2="Â" k="41" /> +<hkern u1="U" u2="Á" k="41" /> +<hkern u1="U" u2="À" k="41" /> +<hkern u1="U" u2="y" k="12" /> +<hkern u1="U" u2="x" k="20" /> +<hkern u1="U" u2="v" k="16" /> +<hkern u1="U" u2="u" k="37" /> +<hkern u1="U" u2="t" k="20" /> +<hkern u1="U" u2="s" k="33" /> +<hkern u1="U" u2="r" k="37" /> +<hkern u1="U" u2="q" k="31" /> +<hkern u1="U" u2="p" k="37" /> +<hkern u1="U" u2="o" k="31" /> +<hkern u1="U" u2="n" k="37" /> +<hkern u1="U" u2="m" k="37" /> +<hkern u1="U" u2="k" k="27" /> +<hkern u1="U" u2="j" k="31" /> +<hkern u1="U" u2="i" k="31" /> +<hkern u1="U" u2="h" k="27" /> +<hkern u1="U" u2="g" k="31" /> +<hkern u1="U" u2="f" k="16" /> +<hkern u1="U" u2="e" k="31" /> +<hkern u1="U" u2="d" k="31" /> +<hkern u1="U" u2="c" k="31" /> +<hkern u1="U" u2="b" k="27" /> +<hkern u1="U" u2="a" k="35" /> +<hkern u1="U" u2="A" k="41" /> +<hkern u1="U" u2="/" k="29" /> +<hkern u1="U" u2="." k="37" /> +<hkern u1="U" u2="," k="37" /> +<hkern u1="U" u2=")" k="23" /> +<hkern u1="V" u2="ffl" k="23" /> +<hkern u1="V" u2="ffi" k="23" /> +<hkern u1="V" u2="fl" k="23" /> +<hkern u1="V" u2="fi" k="23" /> +<hkern u1="V" u2="™" k="-16" /> +<hkern u1="V" u2="›" k="25" /> +<hkern u1="V" u2="‹" k="63" /> +<hkern u1="V" u2="…" k="131" /> +<hkern u1="V" u2="„" k="131" /> +<hkern u1="V" u2="‚" k="131" /> +<hkern u1="V" u2="—" k="68" /> +<hkern u1="V" u2="–" k="68" /> +<hkern u1="V" u2="ÿ" k="20" /> +<hkern u1="V" u2="þ" k="16" /> +<hkern u1="V" u2="ý" k="20" /> +<hkern u1="V" u2="ü" k="84" /> +<hkern u1="V" u2="û" k="84" /> +<hkern u1="V" u2="ú" k="84" /> +<hkern u1="V" u2="ù" k="84" /> +<hkern u1="V" u2="ø" k="109" /> +<hkern u1="V" u2="ö" k="109" /> +<hkern u1="V" u2="õ" k="109" /> +<hkern u1="V" u2="ô" k="109" /> +<hkern u1="V" u2="ó" k="109" /> +<hkern u1="V" u2="ò" k="109" /> +<hkern u1="V" u2="ñ" k="90" /> +<hkern u1="V" u2="ð" k="109" /> +<hkern u1="V" u2="ï" k="-37" /> +<hkern u1="V" u2="î" k="-2" /> +<hkern u1="V" u2="í" k="18" /> +<hkern u1="V" u2="ì" k="-6" /> +<hkern u1="V" u2="ë" k="109" /> +<hkern u1="V" u2="ê" k="109" /> +<hkern u1="V" u2="é" k="109" /> +<hkern u1="V" u2="è" k="109" /> +<hkern u1="V" u2="ç" k="109" /> +<hkern u1="V" u2="æ" k="111" /> +<hkern u1="V" u2="å" k="111" /> +<hkern u1="V" u2="ä" k="111" /> +<hkern u1="V" u2="ã" k="111" /> +<hkern u1="V" u2="â" k="111" /> +<hkern u1="V" u2="á" k="111" /> +<hkern u1="V" u2="à" k="111" /> +<hkern u1="V" u2="ß" k="23" /> +<hkern u1="V" u2="Ý" k="-98" /> +<hkern u1="V" u2="Ø" k="27" /> +<hkern u1="V" u2="Ö" k="27" /> +<hkern u1="V" u2="Õ" k="27" /> +<hkern u1="V" u2="Ô" k="27" /> +<hkern u1="V" u2="Ó" k="27" /> +<hkern u1="V" u2="Ò" k="27" /> +<hkern u1="V" u2="Ç" k="27" /> +<hkern u1="V" u2="Æ" k="98" /> +<hkern u1="V" u2="Å" k="90" /> +<hkern u1="V" u2="Ä" k="90" /> +<hkern u1="V" u2="Ã" k="90" /> +<hkern u1="V" u2="Â" k="90" /> +<hkern u1="V" u2="Á" k="90" /> +<hkern u1="V" u2="À" k="90" /> +<hkern u1="V" u2="»" k="25" /> +<hkern u1="V" u2="®" k="20" /> +<hkern u1="V" u2="«" k="63" /> +<hkern u1="V" u2="y" k="20" /> +<hkern u1="V" u2="x" k="31" /> +<hkern u1="V" u2="v" k="25" /> +<hkern u1="V" u2="u" k="84" /> +<hkern u1="V" u2="t" k="49" /> +<hkern u1="V" u2="s" k="102" /> +<hkern u1="V" u2="r" k="90" /> +<hkern u1="V" u2="q" k="109" /> +<hkern u1="V" u2="p" k="90" /> +<hkern u1="V" u2="o" k="109" /> +<hkern u1="V" u2="n" k="90" /> +<hkern u1="V" u2="m" k="90" /> +<hkern u1="V" u2="k" k="16" /> +<hkern u1="V" u2="j" k="18" /> +<hkern u1="V" u2="i" k="18" /> +<hkern u1="V" u2="h" k="16" /> +<hkern u1="V" u2="g" k="109" /> +<hkern u1="V" u2="f" k="23" /> +<hkern u1="V" u2="e" k="109" /> +<hkern u1="V" u2="d" k="109" /> +<hkern u1="V" u2="c" k="109" /> +<hkern u1="V" u2="b" k="16" /> +<hkern u1="V" u2="a" k="111" /> +<hkern u1="V" u2="Y" k="-98" /> +<hkern u1="V" u2="X" k="-68" /> +<hkern u1="V" u2="V" k="-72" /> +<hkern u1="V" u2="T" k="-63" /> +<hkern u1="V" u2="S" k="10" /> +<hkern u1="V" u2="Q" k="27" /> +<hkern u1="V" u2="O" k="27" /> +<hkern u1="V" u2="G" k="27" /> +<hkern u1="V" u2="C" k="27" /> +<hkern u1="V" u2="A" k="90" /> +<hkern u1="V" u2="@" k="35" /> +<hkern u1="V" u2=";" k="18" /> +<hkern u1="V" u2=":" k="18" /> +<hkern u1="V" u2="/" k="72" /> +<hkern u1="V" u2="." k="131" /> +<hkern u1="V" u2="-" k="68" /> +<hkern u1="V" u2="," k="131" /> +<hkern u1="V" u2="&" k="29" /> +<hkern u1="X" u2="ffl" k="31" /> +<hkern u1="X" u2="ffi" k="31" /> +<hkern u1="X" u2="fl" k="31" /> +<hkern u1="X" u2="fi" k="31" /> +<hkern u1="X" u2="‹" k="31" /> +<hkern u1="X" u2="—" k="63" /> +<hkern u1="X" u2="–" k="63" /> +<hkern u1="X" u2="ÿ" k="74" /> +<hkern u1="X" u2="ý" k="74" /> +<hkern u1="X" u2="ü" k="63" /> +<hkern u1="X" u2="û" k="63" /> +<hkern u1="X" u2="ú" k="63" /> +<hkern u1="X" u2="ù" k="63" /> +<hkern u1="X" u2="ø" k="82" /> +<hkern u1="X" u2="ö" k="82" /> +<hkern u1="X" u2="õ" k="82" /> +<hkern u1="X" u2="ô" k="82" /> +<hkern u1="X" u2="ó" k="82" /> +<hkern u1="X" u2="ò" k="82" /> +<hkern u1="X" u2="ñ" k="16" /> +<hkern u1="X" u2="ð" k="82" /> +<hkern u1="X" u2="ë" k="82" /> +<hkern u1="X" u2="ê" k="82" /> +<hkern u1="X" u2="é" k="82" /> +<hkern u1="X" u2="è" k="82" /> +<hkern u1="X" u2="ç" k="82" /> +<hkern u1="X" u2="æ" k="20" /> +<hkern u1="X" u2="å" k="20" /> +<hkern u1="X" u2="ä" k="20" /> +<hkern u1="X" u2="ã" k="20" /> +<hkern u1="X" u2="â" k="20" /> +<hkern u1="X" u2="á" k="20" /> +<hkern u1="X" u2="à" k="20" /> +<hkern u1="X" u2="ß" k="31" /> +<hkern u1="X" u2="Ý" k="-76" /> +<hkern u1="X" u2="Ø" k="53" /> +<hkern u1="X" u2="Ö" k="53" /> +<hkern u1="X" u2="Õ" k="53" /> +<hkern u1="X" u2="Ô" k="53" /> +<hkern u1="X" u2="Ó" k="53" /> +<hkern u1="X" u2="Ò" k="53" /> +<hkern u1="X" u2="Ç" k="53" /> +<hkern u1="X" u2="Å" k="-66" /> +<hkern u1="X" u2="Ä" k="-66" /> +<hkern u1="X" u2="Ã" k="-66" /> +<hkern u1="X" u2="Â" k="-66" /> +<hkern u1="X" u2="Á" k="-66" /> +<hkern u1="X" u2="À" k="-66" /> +<hkern u1="X" u2="«" k="31" /> +<hkern u1="X" u2="y" k="74" /> +<hkern u1="X" u2="v" k="78" /> +<hkern u1="X" u2="u" k="63" /> +<hkern u1="X" u2="t" k="90" /> +<hkern u1="X" u2="s" k="18" /> +<hkern u1="X" u2="r" k="16" /> +<hkern u1="X" u2="q" k="82" /> +<hkern u1="X" u2="p" k="16" /> +<hkern u1="X" u2="o" k="82" /> +<hkern u1="X" u2="n" k="16" /> +<hkern u1="X" u2="m" k="16" /> +<hkern u1="X" u2="g" k="82" /> +<hkern u1="X" u2="f" k="31" /> +<hkern u1="X" u2="e" k="82" /> +<hkern u1="X" u2="d" k="82" /> +<hkern u1="X" u2="c" k="82" /> +<hkern u1="X" u2="a" k="20" /> +<hkern u1="X" u2="Y" k="-76" /> +<hkern u1="X" u2="X" k="-57" /> +<hkern u1="X" u2="V" k="-66" /> +<hkern u1="X" u2="T" k="-66" /> +<hkern u1="X" u2="S" k="12" /> +<hkern u1="X" u2="Q" k="53" /> +<hkern u1="X" u2="O" k="53" /> +<hkern u1="X" u2="G" k="53" /> +<hkern u1="X" u2="C" k="53" /> +<hkern u1="X" u2="A" k="-66" /> +<hkern u1="X" u2="-" k="63" /> +<hkern u1="X" u2="&" k="35" /> +<hkern u1="Y" u2="ffl" k="49" /> +<hkern u1="Y" u2="ffi" k="49" /> +<hkern u1="Y" u2="fl" k="49" /> +<hkern u1="Y" u2="fi" k="49" /> +<hkern u1="Y" u2="™" k="-53" /> +<hkern u1="Y" u2="›" k="66" /> +<hkern u1="Y" u2="‹" k="121" /> +<hkern u1="Y" u2="…" k="154" /> +<hkern u1="Y" u2="„" k="154" /> +<hkern u1="Y" u2="‚" k="154" /> +<hkern u1="Y" u2="—" k="135" /> +<hkern u1="Y" u2="–" k="135" /> +<hkern u1="Y" u2="ÿ" k="70" /> +<hkern u1="Y" u2="þ" k="16" /> +<hkern u1="Y" u2="ý" k="70" /> +<hkern u1="Y" u2="ü" k="139" /> +<hkern u1="Y" u2="û" k="139" /> +<hkern u1="Y" u2="ú" k="139" /> +<hkern u1="Y" u2="ù" k="139" /> +<hkern u1="Y" u2="ø" k="178" /> +<hkern u1="Y" u2="ö" k="178" /> +<hkern u1="Y" u2="õ" k="178" /> +<hkern u1="Y" u2="ô" k="178" /> +<hkern u1="Y" u2="ó" k="178" /> +<hkern u1="Y" u2="ò" k="178" /> +<hkern u1="Y" u2="ñ" k="143" /> +<hkern u1="Y" u2="ð" k="178" /> +<hkern u1="Y" u2="ï" k="-47" /> +<hkern u1="Y" u2="î" k="18" /> +<hkern u1="Y" u2="í" k="18" /> +<hkern u1="Y" u2="ì" k="-29" /> +<hkern u1="Y" u2="ë" k="178" /> +<hkern u1="Y" u2="ê" k="178" /> +<hkern u1="Y" u2="é" k="178" /> +<hkern u1="Y" u2="è" k="178" /> +<hkern u1="Y" u2="ç" k="178" /> +<hkern u1="Y" u2="æ" k="166" /> +<hkern u1="Y" u2="å" k="166" /> +<hkern u1="Y" u2="ä" k="166" /> +<hkern u1="Y" u2="ã" k="166" /> +<hkern u1="Y" u2="â" k="166" /> +<hkern u1="Y" u2="á" k="166" /> +<hkern u1="Y" u2="à" k="166" /> +<hkern u1="Y" u2="ß" k="49" /> +<hkern u1="Y" u2="Þ" k="10" /> +<hkern u1="Y" u2="Ý" k="-102" /> +<hkern u1="Y" u2="Ø" k="61" /> +<hkern u1="Y" u2="Ö" k="61" /> +<hkern u1="Y" u2="Õ" k="61" /> +<hkern u1="Y" u2="Ô" k="61" /> +<hkern u1="Y" u2="Ó" k="61" /> +<hkern u1="Y" u2="Ò" k="61" /> +<hkern u1="Y" u2="Ñ" k="10" /> +<hkern u1="Y" u2="Ð" k="10" /> +<hkern u1="Y" u2="Ï" k="10" /> +<hkern u1="Y" u2="Î" k="10" /> +<hkern u1="Y" u2="Í" k="10" /> +<hkern u1="Y" u2="Ì" k="10" /> +<hkern u1="Y" u2="Ë" k="10" /> +<hkern u1="Y" u2="Ê" k="10" /> +<hkern u1="Y" u2="É" k="10" /> +<hkern u1="Y" u2="È" k="10" /> +<hkern u1="Y" u2="Ç" k="61" /> +<hkern u1="Y" u2="Æ" k="147" /> +<hkern u1="Y" u2="Å" k="131" /> +<hkern u1="Y" u2="Ä" k="131" /> +<hkern u1="Y" u2="Ã" k="131" /> +<hkern u1="Y" u2="Â" k="131" /> +<hkern u1="Y" u2="Á" k="131" /> +<hkern u1="Y" u2="À" k="131" /> +<hkern u1="Y" u2="»" k="66" /> +<hkern u1="Y" u2="®" k="47" /> +<hkern u1="Y" u2="«" k="121" /> +<hkern u1="Y" u2="}" k="-25" /> +<hkern u1="Y" u2="y" k="70" /> +<hkern u1="Y" u2="x" k="88" /> +<hkern u1="Y" u2="v" k="72" /> +<hkern u1="Y" u2="u" k="139" /> +<hkern u1="Y" u2="t" k="113" /> +<hkern u1="Y" u2="s" k="174" /> +<hkern u1="Y" u2="r" k="143" /> +<hkern u1="Y" u2="q" k="178" /> +<hkern u1="Y" u2="p" k="143" /> +<hkern u1="Y" u2="o" k="178" /> +<hkern u1="Y" u2="n" k="143" /> +<hkern u1="Y" u2="m" k="143" /> +<hkern u1="Y" u2="k" k="16" /> +<hkern u1="Y" u2="j" k="18" /> +<hkern u1="Y" u2="i" k="18" /> +<hkern u1="Y" u2="h" k="16" /> +<hkern u1="Y" u2="g" k="178" /> +<hkern u1="Y" u2="f" k="49" /> +<hkern u1="Y" u2="e" k="178" /> +<hkern u1="Y" u2="d" k="178" /> +<hkern u1="Y" u2="c" k="178" /> +<hkern u1="Y" u2="b" k="16" /> +<hkern u1="Y" u2="a" k="166" /> +<hkern u1="Y" u2="]" k="-20" /> +<hkern u1="Y" u2="Y" k="-102" /> +<hkern u1="Y" u2="X" k="-92" /> +<hkern u1="Y" u2="V" k="-92" /> +<hkern u1="Y" u2="T" k="-86" /> +<hkern u1="Y" u2="S" k="18" /> +<hkern u1="Y" u2="R" k="10" /> +<hkern u1="Y" u2="Q" k="61" /> +<hkern u1="Y" u2="P" k="10" /> +<hkern u1="Y" u2="O" k="61" /> +<hkern u1="Y" u2="N" k="10" /> +<hkern u1="Y" u2="M" k="10" /> +<hkern u1="Y" u2="L" k="10" /> +<hkern u1="Y" u2="K" k="10" /> +<hkern u1="Y" u2="I" k="10" /> +<hkern u1="Y" u2="H" k="10" /> +<hkern u1="Y" u2="G" k="61" /> +<hkern u1="Y" u2="F" k="10" /> +<hkern u1="Y" u2="E" k="10" /> +<hkern u1="Y" u2="D" k="10" /> +<hkern u1="Y" u2="C" k="61" /> +<hkern u1="Y" u2="B" k="10" /> +<hkern u1="Y" u2="A" k="131" /> +<hkern u1="Y" u2="@" k="72" /> +<hkern u1="Y" u2=";" k="53" /> +<hkern u1="Y" u2=":" k="53" /> +<hkern u1="Y" u2="/" k="90" /> +<hkern u1="Y" u2="." k="154" /> +<hkern u1="Y" u2="-" k="135" /> +<hkern u1="Y" u2="," k="154" /> +<hkern u1="Y" u2="&" k="53" /> +<hkern u1="[" u2="ÿ" k="31" /> +<hkern u1="[" u2="ý" k="31" /> +<hkern u1="[" u2="ü" k="47" /> +<hkern u1="[" u2="û" k="47" /> +<hkern u1="[" u2="ú" k="47" /> +<hkern u1="[" u2="ù" k="47" /> +<hkern u1="[" u2="ø" k="51" /> +<hkern u1="[" u2="ö" k="51" /> +<hkern u1="[" u2="õ" k="51" /> +<hkern u1="[" u2="ô" k="51" /> +<hkern u1="[" u2="ó" k="51" /> +<hkern u1="[" u2="ò" k="51" /> +<hkern u1="[" u2="ñ" k="41" /> +<hkern u1="[" u2="ð" k="51" /> +<hkern u1="[" u2="ë" k="51" /> +<hkern u1="[" u2="ê" k="51" /> +<hkern u1="[" u2="é" k="51" /> +<hkern u1="[" u2="è" k="51" /> +<hkern u1="[" u2="ç" k="51" /> +<hkern u1="[" u2="æ" k="41" /> +<hkern u1="[" u2="å" k="41" /> +<hkern u1="[" u2="ä" k="41" /> +<hkern u1="[" u2="ã" k="41" /> +<hkern u1="[" u2="â" k="41" /> +<hkern u1="[" u2="á" k="41" /> +<hkern u1="[" u2="à" k="41" /> +<hkern u1="[" u2="Ý" k="-20" /> +<hkern u1="[" u2="Ø" k="35" /> +<hkern u1="[" u2="Ö" k="35" /> +<hkern u1="[" u2="Õ" k="35" /> +<hkern u1="[" u2="Ô" k="35" /> +<hkern u1="[" u2="Ó" k="35" /> +<hkern u1="[" u2="Ò" k="35" /> +<hkern u1="[" u2="Ç" k="35" /> +<hkern u1="[" u2="Å" k="35" /> +<hkern u1="[" u2="Ä" k="35" /> +<hkern u1="[" u2="Ã" k="35" /> +<hkern u1="[" u2="Â" k="35" /> +<hkern u1="[" u2="Á" k="35" /> +<hkern u1="[" u2="À" k="35" /> +<hkern u1="[" u2="y" k="31" /> +<hkern u1="[" u2="x" k="23" /> +<hkern u1="[" u2="v" k="43" /> +<hkern u1="[" u2="u" k="47" /> +<hkern u1="[" u2="t" k="41" /> +<hkern u1="[" u2="s" k="41" /> +<hkern u1="[" u2="r" k="41" /> +<hkern u1="[" u2="q" k="51" /> +<hkern u1="[" u2="p" k="41" /> +<hkern u1="[" u2="o" k="51" /> +<hkern u1="[" u2="n" k="41" /> +<hkern u1="[" u2="m" k="41" /> +<hkern u1="[" u2="g" k="51" /> +<hkern u1="[" u2="e" k="51" /> +<hkern u1="[" u2="d" k="51" /> +<hkern u1="[" u2="c" k="51" /> +<hkern u1="[" u2="a" k="41" /> +<hkern u1="[" u2="Y" k="-20" /> +<hkern u1="[" u2="Q" k="35" /> +<hkern u1="[" u2="O" k="35" /> +<hkern u1="[" u2="G" k="35" /> +<hkern u1="[" u2="C" k="35" /> +<hkern u1="[" u2="A" k="35" /> +<hkern u1="\" u2="”" k="82" /> +<hkern u1="\" u2="’" k="82" /> +<hkern u1="\" u2="ÿ" k="27" /> +<hkern u1="\" u2="ý" k="27" /> +<hkern u1="\" u2="Ý" k="90" /> +<hkern u1="\" u2="Ü" k="29" /> +<hkern u1="\" u2="Û" k="29" /> +<hkern u1="\" u2="Ú" k="29" /> +<hkern u1="\" u2="Ù" k="29" /> +<hkern u1="\" u2="Ø" k="20" /> +<hkern u1="\" u2="Ö" k="20" /> +<hkern u1="\" u2="Õ" k="20" /> +<hkern u1="\" u2="Ô" k="20" /> +<hkern u1="\" u2="Ó" k="20" /> +<hkern u1="\" u2="Ò" k="20" /> +<hkern u1="\" u2="Ç" k="20" /> +<hkern u1="\" u2="Æ" k="-16" /> +<hkern u1="\" u2="y" k="27" /> +<hkern u1="\" u2="v" k="39" /> +<hkern u1="\" u2="t" k="20" /> +<hkern u1="\" u2="Y" k="90" /> +<hkern u1="\" u2="V" k="72" /> +<hkern u1="\" u2="U" k="29" /> +<hkern u1="\" u2="T" k="74" /> +<hkern u1="\" u2="Q" k="20" /> +<hkern u1="\" u2="O" k="20" /> +<hkern u1="\" u2="G" k="20" /> +<hkern u1="\" u2="C" k="20" /> +<hkern u1="\" u2="'" k="82" /> +<hkern u1="\" u2=""" k="82" /> +<hkern u1="a" u2="ffl" k="12" /> +<hkern u1="a" u2="ffi" k="12" /> +<hkern u1="a" u2="fl" k="12" /> +<hkern u1="a" u2="fi" k="12" /> +<hkern u1="a" u2="™" k="51" /> +<hkern u1="a" u2="”" k="29" /> +<hkern u1="a" u2="“" k="27" /> +<hkern u1="a" u2="’" k="29" /> +<hkern u1="a" u2="‘" k="27" /> +<hkern u1="a" u2="ÿ" k="14" /> +<hkern u1="a" u2="ý" k="14" /> +<hkern u1="a" u2="ü" k="8" /> +<hkern u1="a" u2="û" k="8" /> +<hkern u1="a" u2="ú" k="8" /> +<hkern u1="a" u2="ù" k="8" /> +<hkern u1="a" u2="ß" k="12" /> +<hkern u1="a" u2="Þ" k="29" /> +<hkern u1="a" u2="Ý" k="176" /> +<hkern u1="a" u2="Ü" k="45" /> +<hkern u1="a" u2="Û" k="45" /> +<hkern u1="a" u2="Ú" k="45" /> +<hkern u1="a" u2="Ù" k="45" /> +<hkern u1="a" u2="Ø" k="20" /> +<hkern u1="a" u2="Ö" k="20" /> +<hkern u1="a" u2="Õ" k="20" /> +<hkern u1="a" u2="Ô" k="20" /> +<hkern u1="a" u2="Ó" k="20" /> +<hkern u1="a" u2="Ò" k="20" /> +<hkern u1="a" u2="Ñ" k="29" /> +<hkern u1="a" u2="Ð" k="29" /> +<hkern u1="a" u2="Ï" k="29" /> +<hkern u1="a" u2="Î" k="29" /> +<hkern u1="a" u2="Í" k="29" /> +<hkern u1="a" u2="Ì" k="29" /> +<hkern u1="a" u2="Ë" k="29" /> +<hkern u1="a" u2="Ê" k="29" /> +<hkern u1="a" u2="É" k="29" /> +<hkern u1="a" u2="È" k="29" /> +<hkern u1="a" u2="Ç" k="20" /> +<hkern u1="a" u2="Å" k="10" /> +<hkern u1="a" u2="Ä" k="10" /> +<hkern u1="a" u2="Ã" k="10" /> +<hkern u1="a" u2="Â" k="10" /> +<hkern u1="a" u2="Á" k="10" /> +<hkern u1="a" u2="À" k="10" /> +<hkern u1="a" u2="}" k="41" /> +<hkern u1="a" u2="y" k="14" /> +<hkern u1="a" u2="v" k="20" /> +<hkern u1="a" u2="u" k="8" /> +<hkern u1="a" u2="t" k="10" /> +<hkern u1="a" u2="f" k="12" /> +<hkern u1="a" u2="]" k="47" /> +<hkern u1="a" u2="\" k="47" /> +<hkern u1="a" u2="Y" k="176" /> +<hkern u1="a" u2="X" k="12" /> +<hkern u1="a" u2="V" k="109" /> +<hkern u1="a" u2="U" k="45" /> +<hkern u1="a" u2="T" k="186" /> +<hkern u1="a" u2="S" k="25" /> +<hkern u1="a" u2="R" k="29" /> +<hkern u1="a" u2="Q" k="20" /> +<hkern u1="a" u2="P" k="29" /> +<hkern u1="a" u2="O" k="20" /> +<hkern u1="a" u2="N" k="29" /> +<hkern u1="a" u2="M" k="29" /> +<hkern u1="a" u2="L" k="29" /> +<hkern u1="a" u2="K" k="29" /> +<hkern u1="a" u2="I" k="29" /> +<hkern u1="a" u2="H" k="29" /> +<hkern u1="a" u2="G" k="20" /> +<hkern u1="a" u2="F" k="29" /> +<hkern u1="a" u2="E" k="29" /> +<hkern u1="a" u2="D" k="29" /> +<hkern u1="a" u2="C" k="20" /> +<hkern u1="a" u2="B" k="29" /> +<hkern u1="a" u2="A" k="10" /> +<hkern u1="a" u2="?" k="39" /> +<hkern u1="a" u2="*" k="29" /> +<hkern u1="a" u2=")" k="41" /> +<hkern u1="a" u2="'" k="29" /> +<hkern u1="a" u2="&" k="12" /> +<hkern u1="a" u2=""" k="29" /> +<hkern u1="b" u2="ffl" k="10" /> +<hkern u1="b" u2="ffi" k="10" /> +<hkern u1="b" u2="fl" k="10" /> +<hkern u1="b" u2="fi" k="10" /> +<hkern u1="b" u2="™" k="47" /> +<hkern u1="b" u2="”" k="33" /> +<hkern u1="b" u2="“" k="31" /> +<hkern u1="b" u2="’" k="33" /> +<hkern u1="b" u2="‘" k="31" /> +<hkern u1="b" u2="ÿ" k="10" /> +<hkern u1="b" u2="ý" k="10" /> +<hkern u1="b" u2="ß" k="10" /> +<hkern u1="b" u2="Þ" k="29" /> +<hkern u1="b" u2="Ý" k="178" /> +<hkern u1="b" u2="Ü" k="31" /> +<hkern u1="b" u2="Û" k="31" /> +<hkern u1="b" u2="Ú" k="31" /> +<hkern u1="b" u2="Ù" k="31" /> +<hkern u1="b" u2="Ø" k="12" /> +<hkern u1="b" u2="Ö" k="12" /> +<hkern u1="b" u2="Õ" k="12" /> +<hkern u1="b" u2="Ô" k="12" /> +<hkern u1="b" u2="Ó" k="12" /> +<hkern u1="b" u2="Ò" k="12" /> +<hkern u1="b" u2="Ñ" k="29" /> +<hkern u1="b" u2="Ð" k="29" /> +<hkern u1="b" u2="Ï" k="29" /> +<hkern u1="b" u2="Î" k="29" /> +<hkern u1="b" u2="Í" k="29" /> +<hkern u1="b" u2="Ì" k="29" /> +<hkern u1="b" u2="Ë" k="29" /> +<hkern u1="b" u2="Ê" k="29" /> +<hkern u1="b" u2="É" k="29" /> +<hkern u1="b" u2="È" k="29" /> +<hkern u1="b" u2="Ç" k="12" /> +<hkern u1="b" u2="Å" k="25" /> +<hkern u1="b" u2="Ä" k="25" /> +<hkern u1="b" u2="Ã" k="25" /> +<hkern u1="b" u2="Â" k="25" /> +<hkern u1="b" u2="Á" k="25" /> +<hkern u1="b" u2="À" k="25" /> +<hkern u1="b" u2="}" k="47" /> +<hkern u1="b" u2="y" k="10" /> +<hkern u1="b" u2="x" k="31" /> +<hkern u1="b" u2="v" k="14" /> +<hkern u1="b" u2="t" k="8" /> +<hkern u1="b" u2="f" k="10" /> +<hkern u1="b" u2="]" k="51" /> +<hkern u1="b" u2="\" k="45" /> +<hkern u1="b" u2="Y" k="178" /> +<hkern u1="b" u2="X" k="84" /> +<hkern u1="b" u2="V" k="109" /> +<hkern u1="b" u2="U" k="31" /> +<hkern u1="b" u2="T" k="176" /> +<hkern u1="b" u2="S" k="29" /> +<hkern u1="b" u2="R" k="29" /> +<hkern u1="b" u2="Q" k="12" /> +<hkern u1="b" u2="P" k="29" /> +<hkern u1="b" u2="O" k="12" /> +<hkern u1="b" u2="N" k="29" /> +<hkern u1="b" u2="M" k="29" /> +<hkern u1="b" u2="L" k="29" /> +<hkern u1="b" u2="K" k="29" /> +<hkern u1="b" u2="I" k="29" /> +<hkern u1="b" u2="H" k="29" /> +<hkern u1="b" u2="G" k="12" /> +<hkern u1="b" u2="F" k="29" /> +<hkern u1="b" u2="E" k="29" /> +<hkern u1="b" u2="D" k="29" /> +<hkern u1="b" u2="C" k="12" /> +<hkern u1="b" u2="B" k="29" /> +<hkern u1="b" u2="A" k="25" /> +<hkern u1="b" u2="?" k="41" /> +<hkern u1="b" u2="*" k="29" /> +<hkern u1="b" u2=")" k="55" /> +<hkern u1="b" u2="'" k="33" /> +<hkern u1="b" u2=""" k="33" /> +<hkern u1="c" u2="™" k="25" /> +<hkern u1="c" u2="—" k="25" /> +<hkern u1="c" u2="–" k="25" /> +<hkern u1="c" u2="ø" k="8" /> +<hkern u1="c" u2="ö" k="8" /> +<hkern u1="c" u2="õ" k="8" /> +<hkern u1="c" u2="ô" k="8" /> +<hkern u1="c" u2="ó" k="8" /> +<hkern u1="c" u2="ò" k="8" /> +<hkern u1="c" u2="ð" k="8" /> +<hkern u1="c" u2="ë" k="8" /> +<hkern u1="c" u2="ê" k="8" /> +<hkern u1="c" u2="é" k="8" /> +<hkern u1="c" u2="è" k="8" /> +<hkern u1="c" u2="ç" k="8" /> +<hkern u1="c" u2="Ý" k="143" /> +<hkern u1="c" u2="Ü" k="18" /> +<hkern u1="c" u2="Û" k="18" /> +<hkern u1="c" u2="Ú" k="18" /> +<hkern u1="c" u2="Ù" k="18" /> +<hkern u1="c" u2="Ø" k="23" /> +<hkern u1="c" u2="Ö" k="23" /> +<hkern u1="c" u2="Õ" k="23" /> +<hkern u1="c" u2="Ô" k="23" /> +<hkern u1="c" u2="Ó" k="23" /> +<hkern u1="c" u2="Ò" k="23" /> +<hkern u1="c" u2="Ç" k="23" /> +<hkern u1="c" u2="q" k="8" /> +<hkern u1="c" u2="o" k="8" /> +<hkern u1="c" u2="g" k="8" /> +<hkern u1="c" u2="e" k="8" /> +<hkern u1="c" u2="d" k="8" /> +<hkern u1="c" u2="c" k="8" /> +<hkern u1="c" u2="]" k="25" /> +<hkern u1="c" u2="Y" k="143" /> +<hkern u1="c" u2="V" k="63" /> +<hkern u1="c" u2="U" k="18" /> +<hkern u1="c" u2="T" k="197" /> +<hkern u1="c" u2="S" k="23" /> +<hkern u1="c" u2="Q" k="23" /> +<hkern u1="c" u2="O" k="23" /> +<hkern u1="c" u2="G" k="23" /> +<hkern u1="c" u2="C" k="23" /> +<hkern u1="c" u2="-" k="25" /> +<hkern u1="c" u2=")" k="20" /> +<hkern u1="c" u2="&" k="35" /> +<hkern u1="e" u2="™" k="43" /> +<hkern u1="e" u2="”" k="25" /> +<hkern u1="e" u2="“" k="23" /> +<hkern u1="e" u2="’" k="25" /> +<hkern u1="e" u2="‘" k="23" /> +<hkern u1="e" u2="Þ" k="23" /> +<hkern u1="e" u2="Ý" k="170" /> +<hkern u1="e" u2="Ü" k="27" /> +<hkern u1="e" u2="Û" k="27" /> +<hkern u1="e" u2="Ú" k="27" /> +<hkern u1="e" u2="Ù" k="27" /> +<hkern u1="e" u2="Ø" k="10" /> +<hkern u1="e" u2="Ö" k="10" /> +<hkern u1="e" u2="Õ" k="10" /> +<hkern u1="e" u2="Ô" k="10" /> +<hkern u1="e" u2="Ó" k="10" /> +<hkern u1="e" u2="Ò" k="10" /> +<hkern u1="e" u2="Ñ" k="23" /> +<hkern u1="e" u2="Ð" k="23" /> +<hkern u1="e" u2="Ï" k="23" /> +<hkern u1="e" u2="Î" k="23" /> +<hkern u1="e" u2="Í" k="23" /> +<hkern u1="e" u2="Ì" k="23" /> +<hkern u1="e" u2="Ë" k="23" /> +<hkern u1="e" u2="Ê" k="23" /> +<hkern u1="e" u2="É" k="23" /> +<hkern u1="e" u2="È" k="23" /> +<hkern u1="e" u2="Ç" k="10" /> +<hkern u1="e" u2="Å" k="10" /> +<hkern u1="e" u2="Ä" k="10" /> +<hkern u1="e" u2="Ã" k="10" /> +<hkern u1="e" u2="Â" k="10" /> +<hkern u1="e" u2="Á" k="10" /> +<hkern u1="e" u2="À" k="10" /> +<hkern u1="e" u2="}" k="39" /> +<hkern u1="e" u2="x" k="12" /> +<hkern u1="e" u2="v" k="10" /> +<hkern u1="e" u2="]" k="43" /> +<hkern u1="e" u2="\" k="39" /> +<hkern u1="e" u2="Y" k="170" /> +<hkern u1="e" u2="X" k="33" /> +<hkern u1="e" u2="V" k="111" /> +<hkern u1="e" u2="U" k="27" /> +<hkern u1="e" u2="T" k="166" /> +<hkern u1="e" u2="S" k="23" /> +<hkern u1="e" u2="R" k="23" /> +<hkern u1="e" u2="Q" k="10" /> +<hkern u1="e" u2="P" k="23" /> +<hkern u1="e" u2="O" k="10" /> +<hkern u1="e" u2="N" k="23" /> +<hkern u1="e" u2="M" k="23" /> +<hkern u1="e" u2="L" k="23" /> +<hkern u1="e" u2="K" k="23" /> +<hkern u1="e" u2="I" k="23" /> +<hkern u1="e" u2="H" k="23" /> +<hkern u1="e" u2="G" k="10" /> +<hkern u1="e" u2="F" k="23" /> +<hkern u1="e" u2="E" k="23" /> +<hkern u1="e" u2="D" k="23" /> +<hkern u1="e" u2="C" k="10" /> +<hkern u1="e" u2="B" k="23" /> +<hkern u1="e" u2="A" k="10" /> +<hkern u1="e" u2="?" k="35" /> +<hkern u1="e" u2="*" k="23" /> +<hkern u1="e" u2=")" k="43" /> +<hkern u1="e" u2="'" k="25" /> +<hkern u1="e" u2="&" k="12" /> +<hkern u1="e" u2=""" k="25" /> +<hkern u1="f" u2="‹" k="31" /> +<hkern u1="f" u2="…" k="59" /> +<hkern u1="f" u2="„" k="59" /> +<hkern u1="f" u2="‚" k="59" /> +<hkern u1="f" u2="—" k="63" /> +<hkern u1="f" u2="–" k="63" /> +<hkern u1="f" u2="ÿ" k="-66" /> +<hkern u1="f" u2="ý" k="-66" /> +<hkern u1="f" u2="ø" k="18" /> +<hkern u1="f" u2="ö" k="18" /> +<hkern u1="f" u2="õ" k="18" /> +<hkern u1="f" u2="ô" k="18" /> +<hkern u1="f" u2="ó" k="18" /> +<hkern u1="f" u2="ò" k="18" /> +<hkern u1="f" u2="ð" k="18" /> +<hkern u1="f" u2="ë" k="18" /> +<hkern u1="f" u2="ê" k="18" /> +<hkern u1="f" u2="é" k="18" /> +<hkern u1="f" u2="è" k="18" /> +<hkern u1="f" u2="ç" k="18" /> +<hkern u1="f" u2="æ" k="33" /> +<hkern u1="f" u2="å" k="33" /> +<hkern u1="f" u2="ä" k="33" /> +<hkern u1="f" u2="ã" k="33" /> +<hkern u1="f" u2="â" k="33" /> +<hkern u1="f" u2="á" k="33" /> +<hkern u1="f" u2="à" k="33" /> +<hkern u1="f" u2="Ý" k="-39" /> +<hkern u1="f" u2="Å" k="92" /> +<hkern u1="f" u2="Ä" k="92" /> +<hkern u1="f" u2="Ã" k="92" /> +<hkern u1="f" u2="Â" k="92" /> +<hkern u1="f" u2="Á" k="92" /> +<hkern u1="f" u2="À" k="92" /> +<hkern u1="f" u2="«" k="31" /> +<hkern u1="f" u2="y" k="-66" /> +<hkern u1="f" u2="x" k="-31" /> +<hkern u1="f" u2="v" k="-66" /> +<hkern u1="f" u2="t" k="-43" /> +<hkern u1="f" u2="q" k="18" /> +<hkern u1="f" u2="o" k="18" /> +<hkern u1="f" u2="g" k="18" /> +<hkern u1="f" u2="e" k="18" /> +<hkern u1="f" u2="d" k="18" /> +<hkern u1="f" u2="c" k="18" /> +<hkern u1="f" u2="a" k="33" /> +<hkern u1="f" u2="Y" k="-39" /> +<hkern u1="f" u2="V" k="-14" /> +<hkern u1="f" u2="A" k="92" /> +<hkern u1="f" u2="/" k="35" /> +<hkern u1="f" u2="." k="59" /> +<hkern u1="f" u2="-" k="63" /> +<hkern u1="f" u2="," k="59" /> +<hkern u1="f" u2="&" k="39" /> +<hkern u1="g" u2="™" k="37" /> +<hkern u1="g" u2="Þ" k="20" /> +<hkern u1="g" u2="Ý" k="143" /> +<hkern u1="g" u2="Ü" k="37" /> +<hkern u1="g" u2="Û" k="37" /> +<hkern u1="g" u2="Ú" k="37" /> +<hkern u1="g" u2="Ù" k="37" /> +<hkern u1="g" u2="Ø" k="18" /> +<hkern u1="g" u2="Ö" k="18" /> +<hkern u1="g" u2="Õ" k="18" /> +<hkern u1="g" u2="Ô" k="18" /> +<hkern u1="g" u2="Ó" k="18" /> +<hkern u1="g" u2="Ò" k="18" /> +<hkern u1="g" u2="Ñ" k="20" /> +<hkern u1="g" u2="Ð" k="20" /> +<hkern u1="g" u2="Ï" k="20" /> +<hkern u1="g" u2="Î" k="20" /> +<hkern u1="g" u2="Í" k="20" /> +<hkern u1="g" u2="Ì" k="20" /> +<hkern u1="g" u2="Ë" k="20" /> +<hkern u1="g" u2="Ê" k="20" /> +<hkern u1="g" u2="É" k="20" /> +<hkern u1="g" u2="È" k="20" /> +<hkern u1="g" u2="Ç" k="18" /> +<hkern u1="g" u2="Å" k="12" /> +<hkern u1="g" u2="Ä" k="12" /> +<hkern u1="g" u2="Ã" k="12" /> +<hkern u1="g" u2="Â" k="12" /> +<hkern u1="g" u2="Á" k="12" /> +<hkern u1="g" u2="À" k="12" /> +<hkern u1="g" u2="}" k="37" /> +<hkern u1="g" u2="]" k="41" /> +<hkern u1="g" u2="\" k="31" /> +<hkern u1="g" u2="Y" k="143" /> +<hkern u1="g" u2="X" k="16" /> +<hkern u1="g" u2="V" k="90" /> +<hkern u1="g" u2="U" k="37" /> +<hkern u1="g" u2="T" k="137" /> +<hkern u1="g" u2="S" k="16" /> +<hkern u1="g" u2="R" k="20" /> +<hkern u1="g" u2="Q" k="18" /> +<hkern u1="g" u2="P" k="20" /> +<hkern u1="g" u2="O" k="18" /> +<hkern u1="g" u2="N" k="20" /> +<hkern u1="g" u2="M" k="20" /> +<hkern u1="g" u2="L" k="20" /> +<hkern u1="g" u2="K" k="20" /> +<hkern u1="g" u2="I" k="20" /> +<hkern u1="g" u2="H" k="20" /> +<hkern u1="g" u2="G" k="18" /> +<hkern u1="g" u2="F" k="20" /> +<hkern u1="g" u2="E" k="20" /> +<hkern u1="g" u2="D" k="20" /> +<hkern u1="g" u2="C" k="18" /> +<hkern u1="g" u2="B" k="20" /> +<hkern u1="g" u2="A" k="12" /> +<hkern u1="g" u2=")" k="37" /> +<hkern u1="g" u2="&" k="14" /> +<hkern u1="h" u2="ffl" k="10" /> +<hkern u1="h" u2="ffi" k="10" /> +<hkern u1="h" u2="fl" k="10" /> +<hkern u1="h" u2="fi" k="10" /> +<hkern u1="h" u2="™" k="49" /> +<hkern u1="h" u2="”" k="29" /> +<hkern u1="h" u2="“" k="23" /> +<hkern u1="h" u2="’" k="29" /> +<hkern u1="h" u2="‘" k="23" /> +<hkern u1="h" u2="ÿ" k="12" /> +<hkern u1="h" u2="ý" k="12" /> +<hkern u1="h" u2="ß" k="10" /> +<hkern u1="h" u2="Þ" k="29" /> +<hkern u1="h" u2="Ý" k="166" /> +<hkern u1="h" u2="Ü" k="43" /> +<hkern u1="h" u2="Û" k="43" /> +<hkern u1="h" u2="Ú" k="43" /> +<hkern u1="h" u2="Ù" k="43" /> +<hkern u1="h" u2="Ø" k="20" /> +<hkern u1="h" u2="Ö" k="20" /> +<hkern u1="h" u2="Õ" k="20" /> +<hkern u1="h" u2="Ô" k="20" /> +<hkern u1="h" u2="Ó" k="20" /> +<hkern u1="h" u2="Ò" k="20" /> +<hkern u1="h" u2="Ñ" k="29" /> +<hkern u1="h" u2="Ð" k="29" /> +<hkern u1="h" u2="Ï" k="29" /> +<hkern u1="h" u2="Î" k="29" /> +<hkern u1="h" u2="Í" k="29" /> +<hkern u1="h" u2="Ì" k="29" /> +<hkern u1="h" u2="Ë" k="29" /> +<hkern u1="h" u2="Ê" k="29" /> +<hkern u1="h" u2="É" k="29" /> +<hkern u1="h" u2="È" k="29" /> +<hkern u1="h" u2="Ç" k="20" /> +<hkern u1="h" u2="Å" k="10" /> +<hkern u1="h" u2="Ä" k="10" /> +<hkern u1="h" u2="Ã" k="10" /> +<hkern u1="h" u2="Â" k="10" /> +<hkern u1="h" u2="Á" k="10" /> +<hkern u1="h" u2="À" k="10" /> +<hkern u1="h" u2="}" k="41" /> +<hkern u1="h" u2="y" k="12" /> +<hkern u1="h" u2="v" k="18" /> +<hkern u1="h" u2="t" k="8" /> +<hkern u1="h" u2="f" k="10" /> +<hkern u1="h" u2="]" k="47" /> +<hkern u1="h" u2="\" k="45" /> +<hkern u1="h" u2="Y" k="166" /> +<hkern u1="h" u2="X" k="12" /> +<hkern u1="h" u2="V" k="106" /> +<hkern u1="h" u2="U" k="43" /> +<hkern u1="h" u2="T" k="184" /> +<hkern u1="h" u2="S" k="23" /> +<hkern u1="h" u2="R" k="29" /> +<hkern u1="h" u2="Q" k="20" /> +<hkern u1="h" u2="P" k="29" /> +<hkern u1="h" u2="O" k="20" /> +<hkern u1="h" u2="N" k="29" /> +<hkern u1="h" u2="M" k="29" /> +<hkern u1="h" u2="L" k="29" /> +<hkern u1="h" u2="K" k="29" /> +<hkern u1="h" u2="I" k="29" /> +<hkern u1="h" u2="H" k="29" /> +<hkern u1="h" u2="G" k="20" /> +<hkern u1="h" u2="F" k="29" /> +<hkern u1="h" u2="E" k="29" /> +<hkern u1="h" u2="D" k="29" /> +<hkern u1="h" u2="C" k="20" /> +<hkern u1="h" u2="B" k="29" /> +<hkern u1="h" u2="A" k="10" /> +<hkern u1="h" u2="?" k="37" /> +<hkern u1="h" u2="*" k="27" /> +<hkern u1="h" u2=")" k="41" /> +<hkern u1="h" u2="'" k="29" /> +<hkern u1="h" u2="&" k="12" /> +<hkern u1="h" u2=""" k="29" /> +<hkern u1="i" u2="Þ" k="20" /> +<hkern u1="i" u2="Ý" k="16" /> +<hkern u1="i" u2="Ü" k="31" /> +<hkern u1="i" u2="Û" k="31" /> +<hkern u1="i" u2="Ú" k="31" /> +<hkern u1="i" u2="Ù" k="31" /> +<hkern u1="i" u2="Ø" k="20" /> +<hkern u1="i" u2="Ö" k="20" /> +<hkern u1="i" u2="Õ" k="20" /> +<hkern u1="i" u2="Ô" k="20" /> +<hkern u1="i" u2="Ó" k="20" /> +<hkern u1="i" u2="Ò" k="20" /> +<hkern u1="i" u2="Ñ" k="20" /> +<hkern u1="i" u2="Ð" k="20" /> +<hkern u1="i" u2="Ï" k="20" /> +<hkern u1="i" u2="Î" k="20" /> +<hkern u1="i" u2="Í" k="20" /> +<hkern u1="i" u2="Ì" k="20" /> +<hkern u1="i" u2="Ë" k="20" /> +<hkern u1="i" u2="Ê" k="20" /> +<hkern u1="i" u2="É" k="20" /> +<hkern u1="i" u2="È" k="20" /> +<hkern u1="i" u2="Ç" k="20" /> +<hkern u1="i" u2="Å" k="14" /> +<hkern u1="i" u2="Ä" k="14" /> +<hkern u1="i" u2="Ã" k="14" /> +<hkern u1="i" u2="Â" k="14" /> +<hkern u1="i" u2="Á" k="14" /> +<hkern u1="i" u2="À" k="14" /> +<hkern u1="i" u2="Y" k="16" /> +<hkern u1="i" u2="V" k="18" /> +<hkern u1="i" u2="U" k="31" /> +<hkern u1="i" u2="T" k="20" /> +<hkern u1="i" u2="S" k="18" /> +<hkern u1="i" u2="R" k="20" /> +<hkern u1="i" u2="Q" k="20" /> +<hkern u1="i" u2="P" k="20" /> +<hkern u1="i" u2="O" k="20" /> +<hkern u1="i" u2="N" k="20" /> +<hkern u1="i" u2="M" k="20" /> +<hkern u1="i" u2="L" k="20" /> +<hkern u1="i" u2="K" k="20" /> +<hkern u1="i" u2="I" k="20" /> +<hkern u1="i" u2="H" k="20" /> +<hkern u1="i" u2="G" k="20" /> +<hkern u1="i" u2="F" k="20" /> +<hkern u1="i" u2="E" k="20" /> +<hkern u1="i" u2="D" k="20" /> +<hkern u1="i" u2="C" k="20" /> +<hkern u1="i" u2="B" k="20" /> +<hkern u1="i" u2="A" k="14" /> +<hkern u1="i" u2="&" k="16" /> +<hkern u1="j" u2="Þ" k="20" /> +<hkern u1="j" u2="Ý" k="16" /> +<hkern u1="j" u2="Ü" k="31" /> +<hkern u1="j" u2="Û" k="31" /> +<hkern u1="j" u2="Ú" k="31" /> +<hkern u1="j" u2="Ù" k="31" /> +<hkern u1="j" u2="Ø" k="20" /> +<hkern u1="j" u2="Ö" k="20" /> +<hkern u1="j" u2="Õ" k="20" /> +<hkern u1="j" u2="Ô" k="20" /> +<hkern u1="j" u2="Ó" k="20" /> +<hkern u1="j" u2="Ò" k="20" /> +<hkern u1="j" u2="Ñ" k="20" /> +<hkern u1="j" u2="Ð" k="20" /> +<hkern u1="j" u2="Ï" k="20" /> +<hkern u1="j" u2="Î" k="20" /> +<hkern u1="j" u2="Í" k="20" /> +<hkern u1="j" u2="Ì" k="20" /> +<hkern u1="j" u2="Ë" k="20" /> +<hkern u1="j" u2="Ê" k="20" /> +<hkern u1="j" u2="É" k="20" /> +<hkern u1="j" u2="È" k="20" /> +<hkern u1="j" u2="Ç" k="20" /> +<hkern u1="j" u2="Å" k="14" /> +<hkern u1="j" u2="Ä" k="14" /> +<hkern u1="j" u2="Ã" k="14" /> +<hkern u1="j" u2="Â" k="14" /> +<hkern u1="j" u2="Á" k="14" /> +<hkern u1="j" u2="À" k="14" /> +<hkern u1="j" u2="Y" k="16" /> +<hkern u1="j" u2="V" k="18" /> +<hkern u1="j" u2="U" k="31" /> +<hkern u1="j" u2="T" k="20" /> +<hkern u1="j" u2="S" k="18" /> +<hkern u1="j" u2="R" k="20" /> +<hkern u1="j" u2="Q" k="20" /> +<hkern u1="j" u2="P" k="20" /> +<hkern u1="j" u2="O" k="20" /> +<hkern u1="j" u2="N" k="20" /> +<hkern u1="j" u2="M" k="20" /> +<hkern u1="j" u2="L" k="20" /> +<hkern u1="j" u2="K" k="20" /> +<hkern u1="j" u2="I" k="20" /> +<hkern u1="j" u2="H" k="20" /> +<hkern u1="j" u2="G" k="20" /> +<hkern u1="j" u2="F" k="20" /> +<hkern u1="j" u2="E" k="20" /> +<hkern u1="j" u2="D" k="20" /> +<hkern u1="j" u2="C" k="20" /> +<hkern u1="j" u2="B" k="20" /> +<hkern u1="j" u2="A" k="14" /> +<hkern u1="j" u2="&" k="16" /> +<hkern u1="l" u2="Þ" k="20" /> +<hkern u1="l" u2="Ý" k="23" /> +<hkern u1="l" u2="Ü" k="37" /> +<hkern u1="l" u2="Û" k="37" /> +<hkern u1="l" u2="Ú" k="37" /> +<hkern u1="l" u2="Ù" k="37" /> +<hkern u1="l" u2="Ø" k="23" /> +<hkern u1="l" u2="Ö" k="23" /> +<hkern u1="l" u2="Õ" k="23" /> +<hkern u1="l" u2="Ô" k="23" /> +<hkern u1="l" u2="Ó" k="23" /> +<hkern u1="l" u2="Ò" k="23" /> +<hkern u1="l" u2="Ñ" k="20" /> +<hkern u1="l" u2="Ð" k="20" /> +<hkern u1="l" u2="Ï" k="20" /> +<hkern u1="l" u2="Î" k="20" /> +<hkern u1="l" u2="Í" k="20" /> +<hkern u1="l" u2="Ì" k="20" /> +<hkern u1="l" u2="Ë" k="20" /> +<hkern u1="l" u2="Ê" k="20" /> +<hkern u1="l" u2="É" k="20" /> +<hkern u1="l" u2="È" k="20" /> +<hkern u1="l" u2="Ç" k="23" /> +<hkern u1="l" u2="Å" k="16" /> +<hkern u1="l" u2="Ä" k="16" /> +<hkern u1="l" u2="Ã" k="16" /> +<hkern u1="l" u2="Â" k="16" /> +<hkern u1="l" u2="Á" k="16" /> +<hkern u1="l" u2="À" k="16" /> +<hkern u1="l" u2="·" k="123" /> +<hkern u1="l" u2="Y" k="23" /> +<hkern u1="l" u2="V" k="23" /> +<hkern u1="l" u2="U" k="37" /> +<hkern u1="l" u2="T" k="18" /> +<hkern u1="l" u2="S" k="18" /> +<hkern u1="l" u2="R" k="20" /> +<hkern u1="l" u2="Q" k="23" /> +<hkern u1="l" u2="P" k="20" /> +<hkern u1="l" u2="O" k="23" /> +<hkern u1="l" u2="N" k="20" /> +<hkern u1="l" u2="M" k="20" /> +<hkern u1="l" u2="L" k="20" /> +<hkern u1="l" u2="K" k="20" /> +<hkern u1="l" u2="I" k="20" /> +<hkern u1="l" u2="H" k="20" /> +<hkern u1="l" u2="G" k="23" /> +<hkern u1="l" u2="F" k="20" /> +<hkern u1="l" u2="E" k="20" /> +<hkern u1="l" u2="D" k="20" /> +<hkern u1="l" u2="C" k="23" /> +<hkern u1="l" u2="B" k="20" /> +<hkern u1="l" u2="A" k="16" /> +<hkern u1="l" u2="&" k="18" /> +<hkern u1="m" u2="ffl" k="10" /> +<hkern u1="m" u2="ffi" k="10" /> +<hkern u1="m" u2="fl" k="10" /> +<hkern u1="m" u2="fi" k="10" /> +<hkern u1="m" u2="™" k="49" /> +<hkern u1="m" u2="”" k="29" /> +<hkern u1="m" u2="“" k="23" /> +<hkern u1="m" u2="’" k="29" /> +<hkern u1="m" u2="‘" k="23" /> +<hkern u1="m" u2="ÿ" k="12" /> +<hkern u1="m" u2="ý" k="12" /> +<hkern u1="m" u2="ß" k="10" /> +<hkern u1="m" u2="Þ" k="29" /> +<hkern u1="m" u2="Ý" k="166" /> +<hkern u1="m" u2="Ü" k="43" /> +<hkern u1="m" u2="Û" k="43" /> +<hkern u1="m" u2="Ú" k="43" /> +<hkern u1="m" u2="Ù" k="43" /> +<hkern u1="m" u2="Ø" k="20" /> +<hkern u1="m" u2="Ö" k="20" /> +<hkern u1="m" u2="Õ" k="20" /> +<hkern u1="m" u2="Ô" k="20" /> +<hkern u1="m" u2="Ó" k="20" /> +<hkern u1="m" u2="Ò" k="20" /> +<hkern u1="m" u2="Ñ" k="29" /> +<hkern u1="m" u2="Ð" k="29" /> +<hkern u1="m" u2="Ï" k="29" /> +<hkern u1="m" u2="Î" k="29" /> +<hkern u1="m" u2="Í" k="29" /> +<hkern u1="m" u2="Ì" k="29" /> +<hkern u1="m" u2="Ë" k="29" /> +<hkern u1="m" u2="Ê" k="29" /> +<hkern u1="m" u2="É" k="29" /> +<hkern u1="m" u2="È" k="29" /> +<hkern u1="m" u2="Ç" k="20" /> +<hkern u1="m" u2="Å" k="10" /> +<hkern u1="m" u2="Ä" k="10" /> +<hkern u1="m" u2="Ã" k="10" /> +<hkern u1="m" u2="Â" k="10" /> +<hkern u1="m" u2="Á" k="10" /> +<hkern u1="m" u2="À" k="10" /> +<hkern u1="m" u2="}" k="41" /> +<hkern u1="m" u2="y" k="12" /> +<hkern u1="m" u2="v" k="18" /> +<hkern u1="m" u2="t" k="8" /> +<hkern u1="m" u2="f" k="10" /> +<hkern u1="m" u2="]" k="47" /> +<hkern u1="m" u2="\" k="45" /> +<hkern u1="m" u2="Y" k="166" /> +<hkern u1="m" u2="X" k="12" /> +<hkern u1="m" u2="V" k="106" /> +<hkern u1="m" u2="U" k="43" /> +<hkern u1="m" u2="T" k="184" /> +<hkern u1="m" u2="S" k="23" /> +<hkern u1="m" u2="R" k="29" /> +<hkern u1="m" u2="Q" k="20" /> +<hkern u1="m" u2="P" k="29" /> +<hkern u1="m" u2="O" k="20" /> +<hkern u1="m" u2="N" k="29" /> +<hkern u1="m" u2="M" k="29" /> +<hkern u1="m" u2="L" k="29" /> +<hkern u1="m" u2="K" k="29" /> +<hkern u1="m" u2="I" k="29" /> +<hkern u1="m" u2="H" k="29" /> +<hkern u1="m" u2="G" k="20" /> +<hkern u1="m" u2="F" k="29" /> +<hkern u1="m" u2="E" k="29" /> +<hkern u1="m" u2="D" k="29" /> +<hkern u1="m" u2="C" k="20" /> +<hkern u1="m" u2="B" k="29" /> +<hkern u1="m" u2="A" k="10" /> +<hkern u1="m" u2="?" k="37" /> +<hkern u1="m" u2="*" k="27" /> +<hkern u1="m" u2=")" k="41" /> +<hkern u1="m" u2="'" k="29" /> +<hkern u1="m" u2="&" k="12" /> +<hkern u1="m" u2=""" k="29" /> +<hkern u1="n" u2="ffl" k="10" /> +<hkern u1="n" u2="ffi" k="10" /> +<hkern u1="n" u2="fl" k="10" /> +<hkern u1="n" u2="fi" k="10" /> +<hkern u1="n" u2="™" k="49" /> +<hkern u1="n" u2="”" k="29" /> +<hkern u1="n" u2="“" k="23" /> +<hkern u1="n" u2="’" k="29" /> +<hkern u1="n" u2="‘" k="23" /> +<hkern u1="n" u2="ÿ" k="12" /> +<hkern u1="n" u2="ý" k="12" /> +<hkern u1="n" u2="ß" k="10" /> +<hkern u1="n" u2="Þ" k="29" /> +<hkern u1="n" u2="Ý" k="166" /> +<hkern u1="n" u2="Ü" k="43" /> +<hkern u1="n" u2="Û" k="43" /> +<hkern u1="n" u2="Ú" k="43" /> +<hkern u1="n" u2="Ù" k="43" /> +<hkern u1="n" u2="Ø" k="20" /> +<hkern u1="n" u2="Ö" k="20" /> +<hkern u1="n" u2="Õ" k="20" /> +<hkern u1="n" u2="Ô" k="20" /> +<hkern u1="n" u2="Ó" k="20" /> +<hkern u1="n" u2="Ò" k="20" /> +<hkern u1="n" u2="Ñ" k="29" /> +<hkern u1="n" u2="Ð" k="29" /> +<hkern u1="n" u2="Ï" k="29" /> +<hkern u1="n" u2="Î" k="29" /> +<hkern u1="n" u2="Í" k="29" /> +<hkern u1="n" u2="Ì" k="29" /> +<hkern u1="n" u2="Ë" k="29" /> +<hkern u1="n" u2="Ê" k="29" /> +<hkern u1="n" u2="É" k="29" /> +<hkern u1="n" u2="È" k="29" /> +<hkern u1="n" u2="Ç" k="20" /> +<hkern u1="n" u2="Å" k="10" /> +<hkern u1="n" u2="Ä" k="10" /> +<hkern u1="n" u2="Ã" k="10" /> +<hkern u1="n" u2="Â" k="10" /> +<hkern u1="n" u2="Á" k="10" /> +<hkern u1="n" u2="À" k="10" /> +<hkern u1="n" u2="}" k="41" /> +<hkern u1="n" u2="y" k="12" /> +<hkern u1="n" u2="v" k="18" /> +<hkern u1="n" u2="t" k="8" /> +<hkern u1="n" u2="f" k="10" /> +<hkern u1="n" u2="]" k="47" /> +<hkern u1="n" u2="\" k="45" /> +<hkern u1="n" u2="Y" k="166" /> +<hkern u1="n" u2="X" k="12" /> +<hkern u1="n" u2="V" k="106" /> +<hkern u1="n" u2="U" k="43" /> +<hkern u1="n" u2="T" k="184" /> +<hkern u1="n" u2="S" k="23" /> +<hkern u1="n" u2="R" k="29" /> +<hkern u1="n" u2="Q" k="20" /> +<hkern u1="n" u2="P" k="29" /> +<hkern u1="n" u2="O" k="20" /> +<hkern u1="n" u2="N" k="29" /> +<hkern u1="n" u2="M" k="29" /> +<hkern u1="n" u2="L" k="29" /> +<hkern u1="n" u2="K" k="29" /> +<hkern u1="n" u2="I" k="29" /> +<hkern u1="n" u2="H" k="29" /> +<hkern u1="n" u2="G" k="20" /> +<hkern u1="n" u2="F" k="29" /> +<hkern u1="n" u2="E" k="29" /> +<hkern u1="n" u2="D" k="29" /> +<hkern u1="n" u2="C" k="20" /> +<hkern u1="n" u2="B" k="29" /> +<hkern u1="n" u2="A" k="10" /> +<hkern u1="n" u2="?" k="37" /> +<hkern u1="n" u2="*" k="27" /> +<hkern u1="n" u2=")" k="41" /> +<hkern u1="n" u2="'" k="29" /> +<hkern u1="n" u2="&" k="12" /> +<hkern u1="n" u2=""" k="29" /> +<hkern u1="o" u2="ffl" k="10" /> +<hkern u1="o" u2="ffi" k="10" /> +<hkern u1="o" u2="fl" k="10" /> +<hkern u1="o" u2="fi" k="10" /> +<hkern u1="o" u2="™" k="47" /> +<hkern u1="o" u2="”" k="33" /> +<hkern u1="o" u2="“" k="31" /> +<hkern u1="o" u2="’" k="33" /> +<hkern u1="o" u2="‘" k="31" /> +<hkern u1="o" u2="ÿ" k="10" /> +<hkern u1="o" u2="ý" k="10" /> +<hkern u1="o" u2="ß" k="10" /> +<hkern u1="o" u2="Þ" k="29" /> +<hkern u1="o" u2="Ý" k="178" /> +<hkern u1="o" u2="Ü" k="31" /> +<hkern u1="o" u2="Û" k="31" /> +<hkern u1="o" u2="Ú" k="31" /> +<hkern u1="o" u2="Ù" k="31" /> +<hkern u1="o" u2="Ø" k="12" /> +<hkern u1="o" u2="Ö" k="12" /> +<hkern u1="o" u2="Õ" k="12" /> +<hkern u1="o" u2="Ô" k="12" /> +<hkern u1="o" u2="Ó" k="12" /> +<hkern u1="o" u2="Ò" k="12" /> +<hkern u1="o" u2="Ñ" k="29" /> +<hkern u1="o" u2="Ð" k="29" /> +<hkern u1="o" u2="Ï" k="29" /> +<hkern u1="o" u2="Î" k="29" /> +<hkern u1="o" u2="Í" k="29" /> +<hkern u1="o" u2="Ì" k="29" /> +<hkern u1="o" u2="Ë" k="29" /> +<hkern u1="o" u2="Ê" k="29" /> +<hkern u1="o" u2="É" k="29" /> +<hkern u1="o" u2="È" k="29" /> +<hkern u1="o" u2="Ç" k="12" /> +<hkern u1="o" u2="Å" k="25" /> +<hkern u1="o" u2="Ä" k="25" /> +<hkern u1="o" u2="Ã" k="25" /> +<hkern u1="o" u2="Â" k="25" /> +<hkern u1="o" u2="Á" k="25" /> +<hkern u1="o" u2="À" k="25" /> +<hkern u1="o" u2="}" k="47" /> +<hkern u1="o" u2="y" k="10" /> +<hkern u1="o" u2="x" k="31" /> +<hkern u1="o" u2="v" k="14" /> +<hkern u1="o" u2="t" k="8" /> +<hkern u1="o" u2="f" k="10" /> +<hkern u1="o" u2="]" k="51" /> +<hkern u1="o" u2="\" k="45" /> +<hkern u1="o" u2="Y" k="178" /> +<hkern u1="o" u2="X" k="84" /> +<hkern u1="o" u2="V" k="109" /> +<hkern u1="o" u2="U" k="31" /> +<hkern u1="o" u2="T" k="176" /> +<hkern u1="o" u2="S" k="29" /> +<hkern u1="o" u2="R" k="29" /> +<hkern u1="o" u2="Q" k="12" /> +<hkern u1="o" u2="P" k="29" /> +<hkern u1="o" u2="O" k="12" /> +<hkern u1="o" u2="N" k="29" /> +<hkern u1="o" u2="M" k="29" /> +<hkern u1="o" u2="L" k="29" /> +<hkern u1="o" u2="K" k="29" /> +<hkern u1="o" u2="I" k="29" /> +<hkern u1="o" u2="H" k="29" /> +<hkern u1="o" u2="G" k="12" /> +<hkern u1="o" u2="F" k="29" /> +<hkern u1="o" u2="E" k="29" /> +<hkern u1="o" u2="D" k="29" /> +<hkern u1="o" u2="C" k="12" /> +<hkern u1="o" u2="B" k="29" /> +<hkern u1="o" u2="A" k="25" /> +<hkern u1="o" u2="?" k="41" /> +<hkern u1="o" u2="*" k="29" /> +<hkern u1="o" u2=")" k="55" /> +<hkern u1="o" u2="'" k="33" /> +<hkern u1="o" u2=""" k="33" /> +<hkern u1="p" u2="ffl" k="10" /> +<hkern u1="p" u2="ffi" k="10" /> +<hkern u1="p" u2="fl" k="10" /> +<hkern u1="p" u2="fi" k="10" /> +<hkern u1="p" u2="™" k="47" /> +<hkern u1="p" u2="”" k="33" /> +<hkern u1="p" u2="“" k="31" /> +<hkern u1="p" u2="’" k="33" /> +<hkern u1="p" u2="‘" k="31" /> +<hkern u1="p" u2="ÿ" k="10" /> +<hkern u1="p" u2="ý" k="10" /> +<hkern u1="p" u2="ß" k="10" /> +<hkern u1="p" u2="Þ" k="29" /> +<hkern u1="p" u2="Ý" k="178" /> +<hkern u1="p" u2="Ü" k="31" /> +<hkern u1="p" u2="Û" k="31" /> +<hkern u1="p" u2="Ú" k="31" /> +<hkern u1="p" u2="Ù" k="31" /> +<hkern u1="p" u2="Ø" k="12" /> +<hkern u1="p" u2="Ö" k="12" /> +<hkern u1="p" u2="Õ" k="12" /> +<hkern u1="p" u2="Ô" k="12" /> +<hkern u1="p" u2="Ó" k="12" /> +<hkern u1="p" u2="Ò" k="12" /> +<hkern u1="p" u2="Ñ" k="29" /> +<hkern u1="p" u2="Ð" k="29" /> +<hkern u1="p" u2="Ï" k="29" /> +<hkern u1="p" u2="Î" k="29" /> +<hkern u1="p" u2="Í" k="29" /> +<hkern u1="p" u2="Ì" k="29" /> +<hkern u1="p" u2="Ë" k="29" /> +<hkern u1="p" u2="Ê" k="29" /> +<hkern u1="p" u2="É" k="29" /> +<hkern u1="p" u2="È" k="29" /> +<hkern u1="p" u2="Ç" k="12" /> +<hkern u1="p" u2="Å" k="25" /> +<hkern u1="p" u2="Ä" k="25" /> +<hkern u1="p" u2="Ã" k="25" /> +<hkern u1="p" u2="Â" k="25" /> +<hkern u1="p" u2="Á" k="25" /> +<hkern u1="p" u2="À" k="25" /> +<hkern u1="p" u2="}" k="47" /> +<hkern u1="p" u2="y" k="10" /> +<hkern u1="p" u2="x" k="31" /> +<hkern u1="p" u2="v" k="14" /> +<hkern u1="p" u2="t" k="8" /> +<hkern u1="p" u2="f" k="10" /> +<hkern u1="p" u2="]" k="51" /> +<hkern u1="p" u2="\" k="45" /> +<hkern u1="p" u2="Y" k="178" /> +<hkern u1="p" u2="X" k="84" /> +<hkern u1="p" u2="V" k="109" /> +<hkern u1="p" u2="U" k="31" /> +<hkern u1="p" u2="T" k="176" /> +<hkern u1="p" u2="S" k="29" /> +<hkern u1="p" u2="R" k="29" /> +<hkern u1="p" u2="Q" k="12" /> +<hkern u1="p" u2="P" k="29" /> +<hkern u1="p" u2="O" k="12" /> +<hkern u1="p" u2="N" k="29" /> +<hkern u1="p" u2="M" k="29" /> +<hkern u1="p" u2="L" k="29" /> +<hkern u1="p" u2="K" k="29" /> +<hkern u1="p" u2="I" k="29" /> +<hkern u1="p" u2="H" k="29" /> +<hkern u1="p" u2="G" k="12" /> +<hkern u1="p" u2="F" k="29" /> +<hkern u1="p" u2="E" k="29" /> +<hkern u1="p" u2="D" k="29" /> +<hkern u1="p" u2="C" k="12" /> +<hkern u1="p" u2="B" k="29" /> +<hkern u1="p" u2="A" k="25" /> +<hkern u1="p" u2="?" k="41" /> +<hkern u1="p" u2="*" k="29" /> +<hkern u1="p" u2=")" k="55" /> +<hkern u1="p" u2="'" k="33" /> +<hkern u1="p" u2=""" k="33" /> +<hkern u1="q" u2="™" k="37" /> +<hkern u1="q" u2="Þ" k="20" /> +<hkern u1="q" u2="Ý" k="143" /> +<hkern u1="q" u2="Ü" k="37" /> +<hkern u1="q" u2="Û" k="37" /> +<hkern u1="q" u2="Ú" k="37" /> +<hkern u1="q" u2="Ù" k="37" /> +<hkern u1="q" u2="Ø" k="18" /> +<hkern u1="q" u2="Ö" k="18" /> +<hkern u1="q" u2="Õ" k="18" /> +<hkern u1="q" u2="Ô" k="18" /> +<hkern u1="q" u2="Ó" k="18" /> +<hkern u1="q" u2="Ò" k="18" /> +<hkern u1="q" u2="Ñ" k="20" /> +<hkern u1="q" u2="Ð" k="20" /> +<hkern u1="q" u2="Ï" k="20" /> +<hkern u1="q" u2="Î" k="20" /> +<hkern u1="q" u2="Í" k="20" /> +<hkern u1="q" u2="Ì" k="20" /> +<hkern u1="q" u2="Ë" k="20" /> +<hkern u1="q" u2="Ê" k="20" /> +<hkern u1="q" u2="É" k="20" /> +<hkern u1="q" u2="È" k="20" /> +<hkern u1="q" u2="Ç" k="18" /> +<hkern u1="q" u2="Å" k="12" /> +<hkern u1="q" u2="Ä" k="12" /> +<hkern u1="q" u2="Ã" k="12" /> +<hkern u1="q" u2="Â" k="12" /> +<hkern u1="q" u2="Á" k="12" /> +<hkern u1="q" u2="À" k="12" /> +<hkern u1="q" u2="}" k="37" /> +<hkern u1="q" u2="]" k="41" /> +<hkern u1="q" u2="\" k="31" /> +<hkern u1="q" u2="Y" k="143" /> +<hkern u1="q" u2="X" k="16" /> +<hkern u1="q" u2="V" k="90" /> +<hkern u1="q" u2="U" k="37" /> +<hkern u1="q" u2="T" k="137" /> +<hkern u1="q" u2="S" k="16" /> +<hkern u1="q" u2="R" k="20" /> +<hkern u1="q" u2="Q" k="18" /> +<hkern u1="q" u2="P" k="20" /> +<hkern u1="q" u2="O" k="18" /> +<hkern u1="q" u2="N" k="20" /> +<hkern u1="q" u2="M" k="20" /> +<hkern u1="q" u2="L" k="20" /> +<hkern u1="q" u2="K" k="20" /> +<hkern u1="q" u2="I" k="20" /> +<hkern u1="q" u2="H" k="20" /> +<hkern u1="q" u2="G" k="18" /> +<hkern u1="q" u2="F" k="20" /> +<hkern u1="q" u2="E" k="20" /> +<hkern u1="q" u2="D" k="20" /> +<hkern u1="q" u2="C" k="18" /> +<hkern u1="q" u2="B" k="20" /> +<hkern u1="q" u2="A" k="12" /> +<hkern u1="q" u2=")" k="37" /> +<hkern u1="q" u2="&" k="14" /> +<hkern u1="r" u2="]" k="43" /> +<hkern u1="s" u2="™" k="45" /> +<hkern u1="s" u2="Þ" k="23" /> +<hkern u1="s" u2="Ý" k="164" /> +<hkern u1="s" u2="Ü" k="33" /> +<hkern u1="s" u2="Û" k="33" /> +<hkern u1="s" u2="Ú" k="33" /> +<hkern u1="s" u2="Ù" k="33" /> +<hkern u1="s" u2="Ø" k="18" /> +<hkern u1="s" u2="Ö" k="18" /> +<hkern u1="s" u2="Õ" k="18" /> +<hkern u1="s" u2="Ô" k="18" /> +<hkern u1="s" u2="Ó" k="18" /> +<hkern u1="s" u2="Ò" k="18" /> +<hkern u1="s" u2="Ñ" k="23" /> +<hkern u1="s" u2="Ð" k="23" /> +<hkern u1="s" u2="Ï" k="23" /> +<hkern u1="s" u2="Î" k="23" /> +<hkern u1="s" u2="Í" k="23" /> +<hkern u1="s" u2="Ì" k="23" /> +<hkern u1="s" u2="Ë" k="23" /> +<hkern u1="s" u2="Ê" k="23" /> +<hkern u1="s" u2="É" k="23" /> +<hkern u1="s" u2="È" k="23" /> +<hkern u1="s" u2="Ç" k="18" /> +<hkern u1="s" u2="}" k="35" /> +<hkern u1="s" u2="v" k="8" /> +<hkern u1="s" u2="t" k="8" /> +<hkern u1="s" u2="]" k="41" /> +<hkern u1="s" u2="\" k="35" /> +<hkern u1="s" u2="Y" k="164" /> +<hkern u1="s" u2="X" k="25" /> +<hkern u1="s" u2="V" k="109" /> +<hkern u1="s" u2="U" k="33" /> +<hkern u1="s" u2="T" k="160" /> +<hkern u1="s" u2="S" k="12" /> +<hkern u1="s" u2="R" k="23" /> +<hkern u1="s" u2="Q" k="18" /> +<hkern u1="s" u2="P" k="23" /> +<hkern u1="s" u2="O" k="18" /> +<hkern u1="s" u2="N" k="23" /> +<hkern u1="s" u2="M" k="23" /> +<hkern u1="s" u2="L" k="23" /> +<hkern u1="s" u2="K" k="23" /> +<hkern u1="s" u2="I" k="23" /> +<hkern u1="s" u2="H" k="23" /> +<hkern u1="s" u2="G" k="18" /> +<hkern u1="s" u2="F" k="23" /> +<hkern u1="s" u2="E" k="23" /> +<hkern u1="s" u2="D" k="23" /> +<hkern u1="s" u2="C" k="18" /> +<hkern u1="s" u2="B" k="23" /> +<hkern u1="s" u2="?" k="35" /> +<hkern u1="s" u2=")" k="39" /> +<hkern u1="t" u2="™" k="16" /> +<hkern u1="t" u2="ÿ" k="-31" /> +<hkern u1="t" u2="ý" k="-31" /> +<hkern u1="t" u2="Ý" k="92" /> +<hkern u1="t" u2="Ü" k="14" /> +<hkern u1="t" u2="Û" k="14" /> +<hkern u1="t" u2="Ú" k="14" /> +<hkern u1="t" u2="Ù" k="14" /> +<hkern u1="t" u2="y" k="-31" /> +<hkern u1="t" u2="v" k="-35" /> +<hkern u1="t" u2="t" k="-14" /> +<hkern u1="t" u2="]" k="23" /> +<hkern u1="t" u2="Y" k="92" /> +<hkern u1="t" u2="V" k="37" /> +<hkern u1="t" u2="U" k="14" /> +<hkern u1="t" u2="T" k="150" /> +<hkern u1="t" u2="&" k="23" /> +<hkern u1="u" u2="™" k="37" /> +<hkern u1="u" u2="Þ" k="20" /> +<hkern u1="u" u2="Ý" k="143" /> +<hkern u1="u" u2="Ü" k="37" /> +<hkern u1="u" u2="Û" k="37" /> +<hkern u1="u" u2="Ú" k="37" /> +<hkern u1="u" u2="Ù" k="37" /> +<hkern u1="u" u2="Ø" k="18" /> +<hkern u1="u" u2="Ö" k="18" /> +<hkern u1="u" u2="Õ" k="18" /> +<hkern u1="u" u2="Ô" k="18" /> +<hkern u1="u" u2="Ó" k="18" /> +<hkern u1="u" u2="Ò" k="18" /> +<hkern u1="u" u2="Ñ" k="20" /> +<hkern u1="u" u2="Ð" k="20" /> +<hkern u1="u" u2="Ï" k="20" /> +<hkern u1="u" u2="Î" k="20" /> +<hkern u1="u" u2="Í" k="20" /> +<hkern u1="u" u2="Ì" k="20" /> +<hkern u1="u" u2="Ë" k="20" /> +<hkern u1="u" u2="Ê" k="20" /> +<hkern u1="u" u2="É" k="20" /> +<hkern u1="u" u2="È" k="20" /> +<hkern u1="u" u2="Ç" k="18" /> +<hkern u1="u" u2="Å" k="12" /> +<hkern u1="u" u2="Ä" k="12" /> +<hkern u1="u" u2="Ã" k="12" /> +<hkern u1="u" u2="Â" k="12" /> +<hkern u1="u" u2="Á" k="12" /> +<hkern u1="u" u2="À" k="12" /> +<hkern u1="u" u2="}" k="37" /> +<hkern u1="u" u2="]" k="41" /> +<hkern u1="u" u2="\" k="31" /> +<hkern u1="u" u2="Y" k="143" /> +<hkern u1="u" u2="X" k="16" /> +<hkern u1="u" u2="V" k="90" /> +<hkern u1="u" u2="U" k="37" /> +<hkern u1="u" u2="T" k="137" /> +<hkern u1="u" u2="S" k="16" /> +<hkern u1="u" u2="R" k="20" /> +<hkern u1="u" u2="Q" k="18" /> +<hkern u1="u" u2="P" k="20" /> +<hkern u1="u" u2="O" k="18" /> +<hkern u1="u" u2="N" k="20" /> +<hkern u1="u" u2="M" k="20" /> +<hkern u1="u" u2="L" k="20" /> +<hkern u1="u" u2="K" k="20" /> +<hkern u1="u" u2="I" k="20" /> +<hkern u1="u" u2="H" k="20" /> +<hkern u1="u" u2="G" k="18" /> +<hkern u1="u" u2="F" k="20" /> +<hkern u1="u" u2="E" k="20" /> +<hkern u1="u" u2="D" k="20" /> +<hkern u1="u" u2="C" k="18" /> +<hkern u1="u" u2="B" k="20" /> +<hkern u1="u" u2="A" k="12" /> +<hkern u1="u" u2=")" k="37" /> +<hkern u1="u" u2="&" k="14" /> +<hkern u1="v" u2="ffl" k="-57" /> +<hkern u1="v" u2="ffi" k="-57" /> +<hkern u1="v" u2="fl" k="-57" /> +<hkern u1="v" u2="fi" k="-57" /> +<hkern u1="v" u2="…" k="63" /> +<hkern u1="v" u2="„" k="63" /> +<hkern u1="v" u2="‚" k="63" /> +<hkern u1="v" u2="—" k="16" /> +<hkern u1="v" u2="–" k="16" /> +<hkern u1="v" u2="ÿ" k="-55" /> +<hkern u1="v" u2="ý" k="-55" /> +<hkern u1="v" u2="ø" k="14" /> +<hkern u1="v" u2="ö" k="14" /> +<hkern u1="v" u2="õ" k="14" /> +<hkern u1="v" u2="ô" k="14" /> +<hkern u1="v" u2="ó" k="14" /> +<hkern u1="v" u2="ò" k="14" /> +<hkern u1="v" u2="ð" k="14" /> +<hkern u1="v" u2="ë" k="14" /> +<hkern u1="v" u2="ê" k="14" /> +<hkern u1="v" u2="é" k="14" /> +<hkern u1="v" u2="è" k="14" /> +<hkern u1="v" u2="ç" k="14" /> +<hkern u1="v" u2="æ" k="12" /> +<hkern u1="v" u2="å" k="12" /> +<hkern u1="v" u2="ä" k="12" /> +<hkern u1="v" u2="ã" k="12" /> +<hkern u1="v" u2="â" k="12" /> +<hkern u1="v" u2="á" k="12" /> +<hkern u1="v" u2="à" k="12" /> +<hkern u1="v" u2="ß" k="-57" /> +<hkern u1="v" u2="Þ" k="18" /> +<hkern u1="v" u2="Ý" k="72" /> +<hkern u1="v" u2="Ü" k="16" /> +<hkern u1="v" u2="Û" k="16" /> +<hkern u1="v" u2="Ú" k="16" /> +<hkern u1="v" u2="Ù" k="16" /> +<hkern u1="v" u2="Ñ" k="18" /> +<hkern u1="v" u2="Ð" k="18" /> +<hkern u1="v" u2="Ï" k="18" /> +<hkern u1="v" u2="Î" k="18" /> +<hkern u1="v" u2="Í" k="18" /> +<hkern u1="v" u2="Ì" k="18" /> +<hkern u1="v" u2="Ë" k="18" /> +<hkern u1="v" u2="Ê" k="18" /> +<hkern u1="v" u2="É" k="18" /> +<hkern u1="v" u2="È" k="18" /> +<hkern u1="v" u2="Å" k="74" /> +<hkern u1="v" u2="Ä" k="74" /> +<hkern u1="v" u2="Ã" k="74" /> +<hkern u1="v" u2="Â" k="74" /> +<hkern u1="v" u2="Á" k="74" /> +<hkern u1="v" u2="À" k="74" /> +<hkern u1="v" u2="}" k="35" /> +<hkern u1="v" u2="y" k="-55" /> +<hkern u1="v" u2="x" k="-37" /> +<hkern u1="v" u2="v" k="-41" /> +<hkern u1="v" u2="t" k="-43" /> +<hkern u1="v" u2="q" k="14" /> +<hkern u1="v" u2="o" k="14" /> +<hkern u1="v" u2="g" k="14" /> +<hkern u1="v" u2="f" k="-57" /> +<hkern u1="v" u2="e" k="14" /> +<hkern u1="v" u2="d" k="14" /> +<hkern u1="v" u2="c" k="14" /> +<hkern u1="v" u2="a" k="12" /> +<hkern u1="v" u2="]" k="43" /> +<hkern u1="v" u2="Y" k="72" /> +<hkern u1="v" u2="X" k="78" /> +<hkern u1="v" u2="V" k="25" /> +<hkern u1="v" u2="U" k="16" /> +<hkern u1="v" u2="T" k="100" /> +<hkern u1="v" u2="R" k="18" /> +<hkern u1="v" u2="P" k="18" /> +<hkern u1="v" u2="N" k="18" /> +<hkern u1="v" u2="M" k="18" /> +<hkern u1="v" u2="L" k="18" /> +<hkern u1="v" u2="K" k="18" /> +<hkern u1="v" u2="I" k="18" /> +<hkern u1="v" u2="H" k="18" /> +<hkern u1="v" u2="F" k="18" /> +<hkern u1="v" u2="E" k="18" /> +<hkern u1="v" u2="D" k="18" /> +<hkern u1="v" u2="B" k="18" /> +<hkern u1="v" u2="A" k="74" /> +<hkern u1="v" u2="/" k="39" /> +<hkern u1="v" u2="." k="63" /> +<hkern u1="v" u2="-" k="16" /> +<hkern u1="v" u2="," k="63" /> +<hkern u1="v" u2=")" k="41" /> +<hkern u1="v" u2="&" k="29" /> +<hkern u1="x" u2="ffl" k="-43" /> +<hkern u1="x" u2="ffi" k="-43" /> +<hkern u1="x" u2="fl" k="-43" /> +<hkern u1="x" u2="fi" k="-43" /> +<hkern u1="x" u2="™" k="16" /> +<hkern u1="x" u2="‹" k="27" /> +<hkern u1="x" u2="—" k="47" /> +<hkern u1="x" u2="–" k="47" /> +<hkern u1="x" u2="ÿ" k="-31" /> +<hkern u1="x" u2="ý" k="-31" /> +<hkern u1="x" u2="ø" k="31" /> +<hkern u1="x" u2="ö" k="31" /> +<hkern u1="x" u2="õ" k="31" /> +<hkern u1="x" u2="ô" k="31" /> +<hkern u1="x" u2="ó" k="31" /> +<hkern u1="x" u2="ò" k="31" /> +<hkern u1="x" u2="ð" k="31" /> +<hkern u1="x" u2="ë" k="31" /> +<hkern u1="x" u2="ê" k="31" /> +<hkern u1="x" u2="é" k="31" /> +<hkern u1="x" u2="è" k="31" /> +<hkern u1="x" u2="ç" k="31" /> +<hkern u1="x" u2="ß" k="-43" /> +<hkern u1="x" u2="Þ" k="10" /> +<hkern u1="x" u2="Ý" k="88" /> +<hkern u1="x" u2="Ü" k="20" /> +<hkern u1="x" u2="Û" k="20" /> +<hkern u1="x" u2="Ú" k="20" /> +<hkern u1="x" u2="Ù" k="20" /> +<hkern u1="x" u2="Ø" k="27" /> +<hkern u1="x" u2="Ö" k="27" /> +<hkern u1="x" u2="Õ" k="27" /> +<hkern u1="x" u2="Ô" k="27" /> +<hkern u1="x" u2="Ó" k="27" /> +<hkern u1="x" u2="Ò" k="27" /> +<hkern u1="x" u2="Ñ" k="10" /> +<hkern u1="x" u2="Ð" k="10" /> +<hkern u1="x" u2="Ï" k="10" /> +<hkern u1="x" u2="Î" k="10" /> +<hkern u1="x" u2="Í" k="10" /> +<hkern u1="x" u2="Ì" k="10" /> +<hkern u1="x" u2="Ë" k="10" /> +<hkern u1="x" u2="Ê" k="10" /> +<hkern u1="x" u2="É" k="10" /> +<hkern u1="x" u2="È" k="10" /> +<hkern u1="x" u2="Ç" k="27" /> +<hkern u1="x" u2="«" k="27" /> +<hkern u1="x" u2="y" k="-31" /> +<hkern u1="x" u2="x" k="-29" /> +<hkern u1="x" u2="v" k="-33" /> +<hkern u1="x" u2="q" k="31" /> +<hkern u1="x" u2="o" k="31" /> +<hkern u1="x" u2="g" k="31" /> +<hkern u1="x" u2="f" k="-43" /> +<hkern u1="x" u2="e" k="31" /> +<hkern u1="x" u2="d" k="31" /> +<hkern u1="x" u2="c" k="31" /> +<hkern u1="x" u2="]" k="23" /> +<hkern u1="x" u2="Y" k="88" /> +<hkern u1="x" u2="V" k="31" /> +<hkern u1="x" u2="U" k="20" /> +<hkern u1="x" u2="T" k="139" /> +<hkern u1="x" u2="R" k="10" /> +<hkern u1="x" u2="Q" k="27" /> +<hkern u1="x" u2="P" k="10" /> +<hkern u1="x" u2="O" k="27" /> +<hkern u1="x" u2="N" k="10" /> +<hkern u1="x" u2="M" k="10" /> +<hkern u1="x" u2="L" k="10" /> +<hkern u1="x" u2="K" k="10" /> +<hkern u1="x" u2="I" k="10" /> +<hkern u1="x" u2="H" k="10" /> +<hkern u1="x" u2="G" k="27" /> +<hkern u1="x" u2="F" k="10" /> +<hkern u1="x" u2="E" k="10" /> +<hkern u1="x" u2="D" k="10" /> +<hkern u1="x" u2="C" k="27" /> +<hkern u1="x" u2="B" k="10" /> +<hkern u1="x" u2="-" k="47" /> +<hkern u1="x" u2="&" k="39" /> +<hkern u1="y" u2="…" k="57" /> +<hkern u1="y" u2="„" k="57" /> +<hkern u1="y" u2="‚" k="57" /> +<hkern u1="y" u2="ÿ" k="-59" /> +<hkern u1="y" u2="ý" k="-59" /> +<hkern u1="y" u2="ø" k="10" /> +<hkern u1="y" u2="ö" k="10" /> +<hkern u1="y" u2="õ" k="10" /> +<hkern u1="y" u2="ô" k="10" /> +<hkern u1="y" u2="ó" k="10" /> +<hkern u1="y" u2="ò" k="10" /> +<hkern u1="y" u2="ð" k="10" /> +<hkern u1="y" u2="ë" k="10" /> +<hkern u1="y" u2="ê" k="10" /> +<hkern u1="y" u2="é" k="10" /> +<hkern u1="y" u2="è" k="10" /> +<hkern u1="y" u2="ç" k="10" /> +<hkern u1="y" u2="æ" k="8" /> +<hkern u1="y" u2="å" k="8" /> +<hkern u1="y" u2="ä" k="8" /> +<hkern u1="y" u2="ã" k="8" /> +<hkern u1="y" u2="â" k="8" /> +<hkern u1="y" u2="á" k="8" /> +<hkern u1="y" u2="à" k="8" /> +<hkern u1="y" u2="Þ" k="14" /> +<hkern u1="y" u2="Ý" k="68" /> +<hkern u1="y" u2="Ü" k="12" /> +<hkern u1="y" u2="Û" k="12" /> +<hkern u1="y" u2="Ú" k="12" /> +<hkern u1="y" u2="Ù" k="12" /> +<hkern u1="y" u2="Ñ" k="14" /> +<hkern u1="y" u2="Ð" k="14" /> +<hkern u1="y" u2="Ï" k="14" /> +<hkern u1="y" u2="Î" k="14" /> +<hkern u1="y" u2="Í" k="14" /> +<hkern u1="y" u2="Ì" k="14" /> +<hkern u1="y" u2="Ë" k="14" /> +<hkern u1="y" u2="Ê" k="14" /> +<hkern u1="y" u2="É" k="14" /> +<hkern u1="y" u2="È" k="14" /> +<hkern u1="y" u2="Å" k="70" /> +<hkern u1="y" u2="Ä" k="70" /> +<hkern u1="y" u2="Ã" k="70" /> +<hkern u1="y" u2="Â" k="70" /> +<hkern u1="y" u2="Á" k="70" /> +<hkern u1="y" u2="À" k="70" /> +<hkern u1="y" u2="}" k="27" /> +<hkern u1="y" u2="y" k="-59" /> +<hkern u1="y" u2="x" k="-57" /> +<hkern u1="y" u2="v" k="-63" /> +<hkern u1="y" u2="t" k="-45" /> +<hkern u1="y" u2="q" k="10" /> +<hkern u1="y" u2="o" k="10" /> +<hkern u1="y" u2="g" k="10" /> +<hkern u1="y" u2="e" k="10" /> +<hkern u1="y" u2="d" k="10" /> +<hkern u1="y" u2="c" k="10" /> +<hkern u1="y" u2="a" k="8" /> +<hkern u1="y" u2="]" k="37" /> +<hkern u1="y" u2="Y" k="68" /> +<hkern u1="y" u2="X" k="74" /> +<hkern u1="y" u2="V" k="20" /> +<hkern u1="y" u2="U" k="12" /> +<hkern u1="y" u2="T" k="98" /> +<hkern u1="y" u2="R" k="14" /> +<hkern u1="y" u2="P" k="14" /> +<hkern u1="y" u2="N" k="14" /> +<hkern u1="y" u2="M" k="14" /> +<hkern u1="y" u2="L" k="14" /> +<hkern u1="y" u2="K" k="14" /> +<hkern u1="y" u2="I" k="14" /> +<hkern u1="y" u2="H" k="14" /> +<hkern u1="y" u2="F" k="14" /> +<hkern u1="y" u2="E" k="14" /> +<hkern u1="y" u2="D" k="14" /> +<hkern u1="y" u2="B" k="14" /> +<hkern u1="y" u2="A" k="70" /> +<hkern u1="y" u2="/" k="31" /> +<hkern u1="y" u2="." k="57" /> +<hkern u1="y" u2="," k="57" /> +<hkern u1="y" u2=")" k="35" /> +<hkern u1="y" u2="&" k="25" /> +<hkern u1="{" u2="ÿ" k="23" /> +<hkern u1="{" u2="ý" k="23" /> +<hkern u1="{" u2="ü" k="41" /> +<hkern u1="{" u2="û" k="41" /> +<hkern u1="{" u2="ú" k="41" /> +<hkern u1="{" u2="ù" k="41" /> +<hkern u1="{" u2="ø" k="45" /> +<hkern u1="{" u2="ö" k="45" /> +<hkern u1="{" u2="õ" k="45" /> +<hkern u1="{" u2="ô" k="45" /> +<hkern u1="{" u2="ó" k="45" /> +<hkern u1="{" u2="ò" k="45" /> +<hkern u1="{" u2="ñ" k="37" /> +<hkern u1="{" u2="ð" k="45" /> +<hkern u1="{" u2="ë" k="45" /> +<hkern u1="{" u2="ê" k="45" /> +<hkern u1="{" u2="é" k="45" /> +<hkern u1="{" u2="è" k="45" /> +<hkern u1="{" u2="ç" k="45" /> +<hkern u1="{" u2="æ" k="35" /> +<hkern u1="{" u2="å" k="35" /> +<hkern u1="{" u2="ä" k="35" /> +<hkern u1="{" u2="ã" k="35" /> +<hkern u1="{" u2="â" k="35" /> +<hkern u1="{" u2="á" k="35" /> +<hkern u1="{" u2="à" k="35" /> +<hkern u1="{" u2="Ý" k="-25" /> +<hkern u1="{" u2="Ø" k="35" /> +<hkern u1="{" u2="Ö" k="35" /> +<hkern u1="{" u2="Õ" k="35" /> +<hkern u1="{" u2="Ô" k="35" /> +<hkern u1="{" u2="Ó" k="35" /> +<hkern u1="{" u2="Ò" k="35" /> +<hkern u1="{" u2="Î" k="-25" /> +<hkern u1="{" u2="Ç" k="35" /> +<hkern u1="{" u2="Å" k="27" /> +<hkern u1="{" u2="Ä" k="27" /> +<hkern u1="{" u2="Ã" k="27" /> +<hkern u1="{" u2="Â" k="27" /> +<hkern u1="{" u2="Á" k="27" /> +<hkern u1="{" u2="À" k="27" /> +<hkern u1="{" u2="y" k="23" /> +<hkern u1="{" u2="v" k="35" /> +<hkern u1="{" u2="u" k="41" /> +<hkern u1="{" u2="t" k="35" /> +<hkern u1="{" u2="s" k="37" /> +<hkern u1="{" u2="r" k="37" /> +<hkern u1="{" u2="q" k="45" /> +<hkern u1="{" u2="p" k="37" /> +<hkern u1="{" u2="o" k="45" /> +<hkern u1="{" u2="n" k="37" /> +<hkern u1="{" u2="m" k="37" /> +<hkern u1="{" u2="g" k="45" /> +<hkern u1="{" u2="e" k="45" /> +<hkern u1="{" u2="d" k="45" /> +<hkern u1="{" u2="c" k="45" /> +<hkern u1="{" u2="a" k="35" /> +<hkern u1="{" u2="Y" k="-25" /> +<hkern u1="{" u2="Q" k="35" /> +<hkern u1="{" u2="O" k="35" /> +<hkern u1="{" u2="G" k="35" /> +<hkern u1="{" u2="C" k="35" /> +<hkern u1="{" u2="A" k="27" /> +<hkern u1="¡" u2="Ý" k="66" /> +<hkern u1="¡" u2="Y" k="66" /> +<hkern u1="¡" u2="V" k="33" /> +<hkern u1="¡" u2="T" k="98" /> +<hkern u1="«" u2="Ý" k="66" /> +<hkern u1="«" u2="Y" k="66" /> +<hkern u1="«" u2="V" k="25" /> +<hkern u1="«" u2="T" k="104" /> +<hkern u1="®" u2="Ý" k="51" /> +<hkern u1="®" u2="Å" k="23" /> +<hkern u1="®" u2="Ä" k="23" /> +<hkern u1="®" u2="Ã" k="23" /> +<hkern u1="®" u2="Â" k="23" /> +<hkern u1="®" u2="Á" k="23" /> +<hkern u1="®" u2="À" k="23" /> +<hkern u1="®" u2="Y" k="51" /> +<hkern u1="®" u2="V" k="20" /> +<hkern u1="®" u2="T" k="35" /> +<hkern u1="®" u2="A" k="23" /> +<hkern u1="»" u2="”" k="45" /> +<hkern u1="»" u2="’" k="45" /> +<hkern u1="»" u2="Ý" k="121" /> +<hkern u1="»" u2="x" k="27" /> +<hkern u1="»" u2="Y" k="121" /> +<hkern u1="»" u2="X" k="31" /> +<hkern u1="»" u2="V" k="63" /> +<hkern u1="»" u2="T" k="121" /> +<hkern u1="»" u2="'" k="45" /> +<hkern u1="»" u2=""" k="45" /> +<hkern u1="¿" u2="ffl" k="35" /> +<hkern u1="¿" u2="ffi" k="35" /> +<hkern u1="¿" u2="fl" k="35" /> +<hkern u1="¿" u2="fi" k="35" /> +<hkern u1="¿" u2="ÿ" k="27" /> +<hkern u1="¿" u2="þ" k="37" /> +<hkern u1="¿" u2="ý" k="27" /> +<hkern u1="¿" u2="ü" k="47" /> +<hkern u1="¿" u2="û" k="47" /> +<hkern u1="¿" u2="ú" k="47" /> +<hkern u1="¿" u2="ù" k="47" /> +<hkern u1="¿" u2="ø" k="51" /> +<hkern u1="¿" u2="ö" k="51" /> +<hkern u1="¿" u2="õ" k="51" /> +<hkern u1="¿" u2="ô" k="51" /> +<hkern u1="¿" u2="ó" k="51" /> +<hkern u1="¿" u2="ò" k="51" /> +<hkern u1="¿" u2="ñ" k="37" /> +<hkern u1="¿" u2="ð" k="51" /> +<hkern u1="¿" u2="ï" k="37" /> +<hkern u1="¿" u2="î" k="37" /> +<hkern u1="¿" u2="í" k="37" /> +<hkern u1="¿" u2="ì" k="37" /> +<hkern u1="¿" u2="ë" k="51" /> +<hkern u1="¿" u2="ê" k="51" /> +<hkern u1="¿" u2="é" k="51" /> +<hkern u1="¿" u2="è" k="51" /> +<hkern u1="¿" u2="ç" k="51" /> +<hkern u1="¿" u2="æ" k="43" /> +<hkern u1="¿" u2="å" k="43" /> +<hkern u1="¿" u2="ä" k="43" /> +<hkern u1="¿" u2="ã" k="43" /> +<hkern u1="¿" u2="â" k="43" /> +<hkern u1="¿" u2="á" k="43" /> +<hkern u1="¿" u2="à" k="43" /> +<hkern u1="¿" u2="ß" k="35" /> +<hkern u1="¿" u2="Þ" k="33" /> +<hkern u1="¿" u2="Ý" k="113" /> +<hkern u1="¿" u2="Ü" k="51" /> +<hkern u1="¿" u2="Û" k="51" /> +<hkern u1="¿" u2="Ú" k="51" /> +<hkern u1="¿" u2="Ù" k="51" /> +<hkern u1="¿" u2="Ø" k="45" /> +<hkern u1="¿" u2="Ö" k="45" /> +<hkern u1="¿" u2="Õ" k="45" /> +<hkern u1="¿" u2="Ô" k="45" /> +<hkern u1="¿" u2="Ó" k="45" /> +<hkern u1="¿" u2="Ò" k="45" /> +<hkern u1="¿" u2="Ñ" k="33" /> +<hkern u1="¿" u2="Ð" k="33" /> +<hkern u1="¿" u2="Ï" k="33" /> +<hkern u1="¿" u2="Î" k="33" /> +<hkern u1="¿" u2="Í" k="33" /> +<hkern u1="¿" u2="Ì" k="33" /> +<hkern u1="¿" u2="Ë" k="33" /> +<hkern u1="¿" u2="Ê" k="33" /> +<hkern u1="¿" u2="É" k="33" /> +<hkern u1="¿" u2="È" k="33" /> +<hkern u1="¿" u2="Ç" k="45" /> +<hkern u1="¿" u2="Å" k="31" /> +<hkern u1="¿" u2="Ä" k="31" /> +<hkern u1="¿" u2="Ã" k="31" /> +<hkern u1="¿" u2="Â" k="31" /> +<hkern u1="¿" u2="Á" k="31" /> +<hkern u1="¿" u2="À" k="31" /> +<hkern u1="¿" u2="y" k="27" /> +<hkern u1="¿" u2="x" k="23" /> +<hkern u1="¿" u2="v" k="43" /> +<hkern u1="¿" u2="u" k="47" /> +<hkern u1="¿" u2="t" k="41" /> +<hkern u1="¿" u2="s" k="39" /> +<hkern u1="¿" u2="r" k="37" /> +<hkern u1="¿" u2="q" k="51" /> +<hkern u1="¿" u2="p" k="37" /> +<hkern u1="¿" u2="o" k="51" /> +<hkern u1="¿" u2="n" k="37" /> +<hkern u1="¿" u2="m" k="37" /> +<hkern u1="¿" u2="k" k="37" /> +<hkern u1="¿" u2="j" k="-37" /> +<hkern u1="¿" u2="i" k="37" /> +<hkern u1="¿" u2="h" k="37" /> +<hkern u1="¿" u2="g" k="51" /> +<hkern u1="¿" u2="f" k="35" /> +<hkern u1="¿" u2="e" k="51" /> +<hkern u1="¿" u2="d" k="51" /> +<hkern u1="¿" u2="c" k="51" /> +<hkern u1="¿" u2="b" k="37" /> +<hkern u1="¿" u2="a" k="43" /> +<hkern u1="¿" u2="Y" k="113" /> +<hkern u1="¿" u2="V" k="80" /> +<hkern u1="¿" u2="U" k="51" /> +<hkern u1="¿" u2="T" k="141" /> +<hkern u1="¿" u2="S" k="33" /> +<hkern u1="¿" u2="R" k="33" /> +<hkern u1="¿" u2="Q" k="45" /> +<hkern u1="¿" u2="P" k="33" /> +<hkern u1="¿" u2="O" k="45" /> +<hkern u1="¿" u2="N" k="33" /> +<hkern u1="¿" u2="M" k="33" /> +<hkern u1="¿" u2="L" k="33" /> +<hkern u1="¿" u2="K" k="33" /> +<hkern u1="¿" u2="I" k="33" /> +<hkern u1="¿" u2="H" k="33" /> +<hkern u1="¿" u2="G" k="45" /> +<hkern u1="¿" u2="F" k="33" /> +<hkern u1="¿" u2="E" k="33" /> +<hkern u1="¿" u2="D" k="33" /> +<hkern u1="¿" u2="C" k="45" /> +<hkern u1="¿" u2="B" k="33" /> +<hkern u1="¿" u2="A" k="31" /> +<hkern u1="À" u2="™" k="90" /> +<hkern u1="À" u2="®" k="20" /> +<hkern u1="À" u2="}" k="25" /> +<hkern u1="À" u2="v" k="74" /> +<hkern u1="À" u2="]" k="31" /> +<hkern u1="À" u2="\" k="66" /> +<hkern u1="À" u2="X" k="-49" /> +<hkern u1="À" u2="V" k="90" /> +<hkern u1="À" u2="?" k="37" /> +<hkern u1="À" u2="*" k="84" /> +<hkern u1="Á" u2="™" k="90" /> +<hkern u1="Á" u2="®" k="20" /> +<hkern u1="Á" u2="}" k="25" /> +<hkern u1="Á" u2="v" k="74" /> +<hkern u1="Á" u2="]" k="31" /> +<hkern u1="Á" u2="\" k="66" /> +<hkern u1="Á" u2="X" k="-49" /> +<hkern u1="Á" u2="V" k="90" /> +<hkern u1="Á" u2="?" k="37" /> +<hkern u1="Á" u2="*" k="84" /> +<hkern u1="Â" u2="™" k="90" /> +<hkern u1="Â" u2="®" k="20" /> +<hkern u1="Â" u2="}" k="25" /> +<hkern u1="Â" u2="v" k="74" /> +<hkern u1="Â" u2="]" k="31" /> +<hkern u1="Â" u2="\" k="66" /> +<hkern u1="Â" u2="X" k="-49" /> +<hkern u1="Â" u2="V" k="90" /> +<hkern u1="Â" u2="?" k="37" /> +<hkern u1="Â" u2="*" k="84" /> +<hkern u1="Ã" u2="™" k="90" /> +<hkern u1="Ã" u2="®" k="20" /> +<hkern u1="Ã" u2="}" k="25" /> +<hkern u1="Ã" u2="v" k="74" /> +<hkern u1="Ã" u2="]" k="31" /> +<hkern u1="Ã" u2="\" k="66" /> +<hkern u1="Ã" u2="X" k="-49" /> +<hkern u1="Ã" u2="V" k="90" /> +<hkern u1="Ã" u2="?" k="37" /> +<hkern u1="Ã" u2="*" k="84" /> +<hkern u1="Ä" u2="™" k="90" /> +<hkern u1="Ä" u2="®" k="20" /> +<hkern u1="Ä" u2="}" k="25" /> +<hkern u1="Ä" u2="v" k="74" /> +<hkern u1="Ä" u2="]" k="31" /> +<hkern u1="Ä" u2="\" k="66" /> +<hkern u1="Ä" u2="X" k="-49" /> +<hkern u1="Ä" u2="V" k="90" /> +<hkern u1="Ä" u2="?" k="37" /> +<hkern u1="Ä" u2="*" k="84" /> +<hkern u1="Å" u2="™" k="90" /> +<hkern u1="Å" u2="®" k="20" /> +<hkern u1="Å" u2="}" k="25" /> +<hkern u1="Å" u2="v" k="74" /> +<hkern u1="Å" u2="]" k="31" /> +<hkern u1="Å" u2="\" k="66" /> +<hkern u1="Å" u2="X" k="-49" /> +<hkern u1="Å" u2="V" k="90" /> +<hkern u1="Å" u2="?" k="37" /> +<hkern u1="Å" u2="*" k="84" /> +<hkern u1="Æ" u2="ffl" k="23" /> +<hkern u1="Æ" u2="ffi" k="23" /> +<hkern u1="Æ" u2="fl" k="23" /> +<hkern u1="Æ" u2="fi" k="23" /> +<hkern u1="Æ" u2="ÿ" k="29" /> +<hkern u1="Æ" u2="ý" k="29" /> +<hkern u1="Æ" u2="ü" k="27" /> +<hkern u1="Æ" u2="û" k="27" /> +<hkern u1="Æ" u2="ú" k="27" /> +<hkern u1="Æ" u2="ù" k="27" /> +<hkern u1="Æ" u2="ø" k="29" /> +<hkern u1="Æ" u2="ö" k="29" /> +<hkern u1="Æ" u2="õ" k="29" /> +<hkern u1="Æ" u2="ô" k="29" /> +<hkern u1="Æ" u2="ó" k="29" /> +<hkern u1="Æ" u2="ò" k="29" /> +<hkern u1="Æ" u2="ñ" k="14" /> +<hkern u1="Æ" u2="ð" k="29" /> +<hkern u1="Æ" u2="ë" k="29" /> +<hkern u1="Æ" u2="ê" k="29" /> +<hkern u1="Æ" u2="é" k="29" /> +<hkern u1="Æ" u2="è" k="29" /> +<hkern u1="Æ" u2="ç" k="29" /> +<hkern u1="Æ" u2="æ" k="14" /> +<hkern u1="Æ" u2="å" k="14" /> +<hkern u1="Æ" u2="ä" k="14" /> +<hkern u1="Æ" u2="ã" k="14" /> +<hkern u1="Æ" u2="â" k="14" /> +<hkern u1="Æ" u2="á" k="14" /> +<hkern u1="Æ" u2="à" k="14" /> +<hkern u1="Æ" u2="ß" k="23" /> +<hkern u1="Æ" u2="Ø" k="14" /> +<hkern u1="Æ" u2="Ö" k="14" /> +<hkern u1="Æ" u2="Õ" k="14" /> +<hkern u1="Æ" u2="Ô" k="14" /> +<hkern u1="Æ" u2="Ó" k="14" /> +<hkern u1="Æ" u2="Ò" k="14" /> +<hkern u1="Æ" u2="Ç" k="14" /> +<hkern u1="Æ" u2="y" k="29" /> +<hkern u1="Æ" u2="v" k="33" /> +<hkern u1="Æ" u2="u" k="27" /> +<hkern u1="Æ" u2="t" k="35" /> +<hkern u1="Æ" u2="s" k="12" /> +<hkern u1="Æ" u2="r" k="14" /> +<hkern u1="Æ" u2="q" k="29" /> +<hkern u1="Æ" u2="p" k="14" /> +<hkern u1="Æ" u2="o" k="29" /> +<hkern u1="Æ" u2="n" k="14" /> +<hkern u1="Æ" u2="m" k="14" /> +<hkern u1="Æ" u2="g" k="29" /> +<hkern u1="Æ" u2="f" k="23" /> +<hkern u1="Æ" u2="e" k="29" /> +<hkern u1="Æ" u2="d" k="29" /> +<hkern u1="Æ" u2="c" k="29" /> +<hkern u1="Æ" u2="a" k="14" /> +<hkern u1="Æ" u2="Q" k="14" /> +<hkern u1="Æ" u2="O" k="14" /> +<hkern u1="Æ" u2="G" k="14" /> +<hkern u1="Æ" u2="C" k="14" /> +<hkern u1="Æ" u2="&" k="14" /> +<hkern u1="Ç" u2="ffl" k="14" /> +<hkern u1="Ç" u2="ffi" k="14" /> +<hkern u1="Ç" u2="fl" k="14" /> +<hkern u1="Ç" u2="fi" k="14" /> +<hkern u1="Ç" u2="—" k="45" /> +<hkern u1="Ç" u2="–" k="45" /> +<hkern u1="Ç" u2="ÿ" k="94" /> +<hkern u1="Ç" u2="ý" k="94" /> +<hkern u1="Ç" u2="ü" k="23" /> +<hkern u1="Ç" u2="û" k="23" /> +<hkern u1="Ç" u2="ú" k="23" /> +<hkern u1="Ç" u2="ù" k="23" /> +<hkern u1="Ç" u2="ø" k="33" /> +<hkern u1="Ç" u2="ö" k="33" /> +<hkern u1="Ç" u2="õ" k="33" /> +<hkern u1="Ç" u2="ô" k="33" /> +<hkern u1="Ç" u2="ó" k="33" /> +<hkern u1="Ç" u2="ò" k="33" /> +<hkern u1="Ç" u2="ñ" k="14" /> +<hkern u1="Ç" u2="ð" k="33" /> +<hkern u1="Ç" u2="ë" k="33" /> +<hkern u1="Ç" u2="ê" k="33" /> +<hkern u1="Ç" u2="é" k="33" /> +<hkern u1="Ç" u2="è" k="33" /> +<hkern u1="Ç" u2="ç" k="33" /> +<hkern u1="Ç" u2="ß" k="14" /> +<hkern u1="Ç" u2="Ø" k="18" /> +<hkern u1="Ç" u2="Ö" k="18" /> +<hkern u1="Ç" u2="Õ" k="18" /> +<hkern u1="Ç" u2="Ô" k="18" /> +<hkern u1="Ç" u2="Ó" k="18" /> +<hkern u1="Ç" u2="Ò" k="18" /> +<hkern u1="Ç" u2="Ç" k="18" /> +<hkern u1="Ç" u2="y" k="94" /> +<hkern u1="Ç" u2="v" k="102" /> +<hkern u1="Ç" u2="u" k="23" /> +<hkern u1="Ç" u2="t" k="41" /> +<hkern u1="Ç" u2="s" k="20" /> +<hkern u1="Ç" u2="r" k="14" /> +<hkern u1="Ç" u2="q" k="33" /> +<hkern u1="Ç" u2="p" k="14" /> +<hkern u1="Ç" u2="o" k="33" /> +<hkern u1="Ç" u2="n" k="14" /> +<hkern u1="Ç" u2="m" k="14" /> +<hkern u1="Ç" u2="g" k="33" /> +<hkern u1="Ç" u2="f" k="14" /> +<hkern u1="Ç" u2="e" k="33" /> +<hkern u1="Ç" u2="d" k="33" /> +<hkern u1="Ç" u2="c" k="33" /> +<hkern u1="Ç" u2="Q" k="18" /> +<hkern u1="Ç" u2="O" k="18" /> +<hkern u1="Ç" u2="G" k="18" /> +<hkern u1="Ç" u2="C" k="18" /> +<hkern u1="Ç" u2="-" k="45" /> +<hkern u1="Ç" u2="&" k="14" /> +<hkern u1="È" u2="ffl" k="23" /> +<hkern u1="È" u2="ffi" k="23" /> +<hkern u1="È" u2="fl" k="23" /> +<hkern u1="È" u2="fi" k="23" /> +<hkern u1="È" u2="ÿ" k="29" /> +<hkern u1="È" u2="ý" k="29" /> +<hkern u1="È" u2="ü" k="27" /> +<hkern u1="È" u2="û" k="27" /> +<hkern u1="È" u2="ú" k="27" /> +<hkern u1="È" u2="ù" k="27" /> +<hkern u1="È" u2="ø" k="29" /> +<hkern u1="È" u2="ö" k="29" /> +<hkern u1="È" u2="õ" k="29" /> +<hkern u1="È" u2="ô" k="29" /> +<hkern u1="È" u2="ó" k="29" /> +<hkern u1="È" u2="ò" k="29" /> +<hkern u1="È" u2="ñ" k="14" /> +<hkern u1="È" u2="ð" k="29" /> +<hkern u1="È" u2="ë" k="29" /> +<hkern u1="È" u2="ê" k="29" /> +<hkern u1="È" u2="é" k="29" /> +<hkern u1="È" u2="è" k="29" /> +<hkern u1="È" u2="ç" k="29" /> +<hkern u1="È" u2="æ" k="14" /> +<hkern u1="È" u2="å" k="14" /> +<hkern u1="È" u2="ä" k="14" /> +<hkern u1="È" u2="ã" k="14" /> +<hkern u1="È" u2="â" k="14" /> +<hkern u1="È" u2="á" k="14" /> +<hkern u1="È" u2="à" k="14" /> +<hkern u1="È" u2="ß" k="23" /> +<hkern u1="È" u2="Ø" k="14" /> +<hkern u1="È" u2="Ö" k="14" /> +<hkern u1="È" u2="Õ" k="14" /> +<hkern u1="È" u2="Ô" k="14" /> +<hkern u1="È" u2="Ó" k="14" /> +<hkern u1="È" u2="Ò" k="14" /> +<hkern u1="È" u2="Ç" k="14" /> +<hkern u1="È" u2="y" k="29" /> +<hkern u1="È" u2="v" k="33" /> +<hkern u1="È" u2="u" k="27" /> +<hkern u1="È" u2="t" k="35" /> +<hkern u1="È" u2="s" k="12" /> +<hkern u1="È" u2="r" k="14" /> +<hkern u1="È" u2="q" k="29" /> +<hkern u1="È" u2="p" k="14" /> +<hkern u1="È" u2="o" k="29" /> +<hkern u1="È" u2="n" k="14" /> +<hkern u1="È" u2="m" k="14" /> +<hkern u1="È" u2="g" k="29" /> +<hkern u1="È" u2="f" k="23" /> +<hkern u1="È" u2="e" k="29" /> +<hkern u1="È" u2="d" k="29" /> +<hkern u1="È" u2="c" k="29" /> +<hkern u1="È" u2="a" k="14" /> +<hkern u1="È" u2="Q" k="14" /> +<hkern u1="È" u2="O" k="14" /> +<hkern u1="È" u2="G" k="14" /> +<hkern u1="È" u2="C" k="14" /> +<hkern u1="È" u2="&" k="14" /> +<hkern u1="É" u2="ffl" k="23" /> +<hkern u1="É" u2="ffi" k="23" /> +<hkern u1="É" u2="fl" k="23" /> +<hkern u1="É" u2="fi" k="23" /> +<hkern u1="É" u2="ÿ" k="29" /> +<hkern u1="É" u2="ý" k="29" /> +<hkern u1="É" u2="ü" k="27" /> +<hkern u1="É" u2="û" k="27" /> +<hkern u1="É" u2="ú" k="27" /> +<hkern u1="É" u2="ù" k="27" /> +<hkern u1="É" u2="ø" k="29" /> +<hkern u1="É" u2="ö" k="29" /> +<hkern u1="É" u2="õ" k="29" /> +<hkern u1="É" u2="ô" k="29" /> +<hkern u1="É" u2="ó" k="29" /> +<hkern u1="É" u2="ò" k="29" /> +<hkern u1="É" u2="ñ" k="14" /> +<hkern u1="É" u2="ð" k="29" /> +<hkern u1="É" u2="ë" k="29" /> +<hkern u1="É" u2="ê" k="29" /> +<hkern u1="É" u2="é" k="29" /> +<hkern u1="É" u2="è" k="29" /> +<hkern u1="É" u2="ç" k="29" /> +<hkern u1="É" u2="æ" k="14" /> +<hkern u1="É" u2="å" k="14" /> +<hkern u1="É" u2="ä" k="14" /> +<hkern u1="É" u2="ã" k="14" /> +<hkern u1="É" u2="â" k="14" /> +<hkern u1="É" u2="á" k="14" /> +<hkern u1="É" u2="à" k="14" /> +<hkern u1="É" u2="ß" k="23" /> +<hkern u1="É" u2="Ø" k="14" /> +<hkern u1="É" u2="Ö" k="14" /> +<hkern u1="É" u2="Õ" k="14" /> +<hkern u1="É" u2="Ô" k="14" /> +<hkern u1="É" u2="Ó" k="14" /> +<hkern u1="É" u2="Ò" k="14" /> +<hkern u1="É" u2="Ç" k="14" /> +<hkern u1="É" u2="y" k="29" /> +<hkern u1="É" u2="v" k="33" /> +<hkern u1="É" u2="u" k="27" /> +<hkern u1="É" u2="t" k="35" /> +<hkern u1="É" u2="s" k="12" /> +<hkern u1="É" u2="r" k="14" /> +<hkern u1="É" u2="q" k="29" /> +<hkern u1="É" u2="p" k="14" /> +<hkern u1="É" u2="o" k="29" /> +<hkern u1="É" u2="n" k="14" /> +<hkern u1="É" u2="m" k="14" /> +<hkern u1="É" u2="g" k="29" /> +<hkern u1="É" u2="f" k="23" /> +<hkern u1="É" u2="e" k="29" /> +<hkern u1="É" u2="d" k="29" /> +<hkern u1="É" u2="c" k="29" /> +<hkern u1="É" u2="a" k="14" /> +<hkern u1="É" u2="Q" k="14" /> +<hkern u1="É" u2="O" k="14" /> +<hkern u1="É" u2="G" k="14" /> +<hkern u1="É" u2="C" k="14" /> +<hkern u1="É" u2="&" k="14" /> +<hkern u1="Ê" u2="ffl" k="23" /> +<hkern u1="Ê" u2="ffi" k="23" /> +<hkern u1="Ê" u2="fl" k="23" /> +<hkern u1="Ê" u2="fi" k="23" /> +<hkern u1="Ê" u2="ÿ" k="29" /> +<hkern u1="Ê" u2="ý" k="29" /> +<hkern u1="Ê" u2="ü" k="27" /> +<hkern u1="Ê" u2="û" k="27" /> +<hkern u1="Ê" u2="ú" k="27" /> +<hkern u1="Ê" u2="ù" k="27" /> +<hkern u1="Ê" u2="ø" k="29" /> +<hkern u1="Ê" u2="ö" k="29" /> +<hkern u1="Ê" u2="õ" k="29" /> +<hkern u1="Ê" u2="ô" k="29" /> +<hkern u1="Ê" u2="ó" k="29" /> +<hkern u1="Ê" u2="ò" k="29" /> +<hkern u1="Ê" u2="ñ" k="14" /> +<hkern u1="Ê" u2="ð" k="29" /> +<hkern u1="Ê" u2="ë" k="29" /> +<hkern u1="Ê" u2="ê" k="29" /> +<hkern u1="Ê" u2="é" k="29" /> +<hkern u1="Ê" u2="è" k="29" /> +<hkern u1="Ê" u2="ç" k="29" /> +<hkern u1="Ê" u2="æ" k="14" /> +<hkern u1="Ê" u2="å" k="14" /> +<hkern u1="Ê" u2="ä" k="14" /> +<hkern u1="Ê" u2="ã" k="14" /> +<hkern u1="Ê" u2="â" k="14" /> +<hkern u1="Ê" u2="á" k="14" /> +<hkern u1="Ê" u2="à" k="14" /> +<hkern u1="Ê" u2="ß" k="23" /> +<hkern u1="Ê" u2="Ø" k="14" /> +<hkern u1="Ê" u2="Ö" k="14" /> +<hkern u1="Ê" u2="Õ" k="14" /> +<hkern u1="Ê" u2="Ô" k="14" /> +<hkern u1="Ê" u2="Ó" k="14" /> +<hkern u1="Ê" u2="Ò" k="14" /> +<hkern u1="Ê" u2="Ç" k="14" /> +<hkern u1="Ê" u2="y" k="29" /> +<hkern u1="Ê" u2="v" k="33" /> +<hkern u1="Ê" u2="u" k="27" /> +<hkern u1="Ê" u2="t" k="35" /> +<hkern u1="Ê" u2="s" k="12" /> +<hkern u1="Ê" u2="r" k="14" /> +<hkern u1="Ê" u2="q" k="29" /> +<hkern u1="Ê" u2="p" k="14" /> +<hkern u1="Ê" u2="o" k="29" /> +<hkern u1="Ê" u2="n" k="14" /> +<hkern u1="Ê" u2="m" k="14" /> +<hkern u1="Ê" u2="g" k="29" /> +<hkern u1="Ê" u2="f" k="23" /> +<hkern u1="Ê" u2="e" k="29" /> +<hkern u1="Ê" u2="d" k="29" /> +<hkern u1="Ê" u2="c" k="29" /> +<hkern u1="Ê" u2="a" k="14" /> +<hkern u1="Ê" u2="Q" k="14" /> +<hkern u1="Ê" u2="O" k="14" /> +<hkern u1="Ê" u2="G" k="14" /> +<hkern u1="Ê" u2="C" k="14" /> +<hkern u1="Ê" u2="&" k="14" /> +<hkern u1="Ë" u2="ffl" k="23" /> +<hkern u1="Ë" u2="ffi" k="23" /> +<hkern u1="Ë" u2="fl" k="23" /> +<hkern u1="Ë" u2="fi" k="23" /> +<hkern u1="Ë" u2="ÿ" k="29" /> +<hkern u1="Ë" u2="ý" k="29" /> +<hkern u1="Ë" u2="ü" k="27" /> +<hkern u1="Ë" u2="û" k="27" /> +<hkern u1="Ë" u2="ú" k="27" /> +<hkern u1="Ë" u2="ù" k="27" /> +<hkern u1="Ë" u2="ø" k="29" /> +<hkern u1="Ë" u2="ö" k="29" /> +<hkern u1="Ë" u2="õ" k="29" /> +<hkern u1="Ë" u2="ô" k="29" /> +<hkern u1="Ë" u2="ó" k="29" /> +<hkern u1="Ë" u2="ò" k="29" /> +<hkern u1="Ë" u2="ñ" k="14" /> +<hkern u1="Ë" u2="ð" k="29" /> +<hkern u1="Ë" u2="ë" k="29" /> +<hkern u1="Ë" u2="ê" k="29" /> +<hkern u1="Ë" u2="é" k="29" /> +<hkern u1="Ë" u2="è" k="29" /> +<hkern u1="Ë" u2="ç" k="29" /> +<hkern u1="Ë" u2="æ" k="14" /> +<hkern u1="Ë" u2="å" k="14" /> +<hkern u1="Ë" u2="ä" k="14" /> +<hkern u1="Ë" u2="ã" k="14" /> +<hkern u1="Ë" u2="â" k="14" /> +<hkern u1="Ë" u2="á" k="14" /> +<hkern u1="Ë" u2="à" k="14" /> +<hkern u1="Ë" u2="ß" k="23" /> +<hkern u1="Ë" u2="Ø" k="14" /> +<hkern u1="Ë" u2="Ö" k="14" /> +<hkern u1="Ë" u2="Õ" k="14" /> +<hkern u1="Ë" u2="Ô" k="14" /> +<hkern u1="Ë" u2="Ó" k="14" /> +<hkern u1="Ë" u2="Ò" k="14" /> +<hkern u1="Ë" u2="Ç" k="14" /> +<hkern u1="Ë" u2="y" k="29" /> +<hkern u1="Ë" u2="v" k="33" /> +<hkern u1="Ë" u2="u" k="27" /> +<hkern u1="Ë" u2="t" k="35" /> +<hkern u1="Ë" u2="s" k="12" /> +<hkern u1="Ë" u2="r" k="14" /> +<hkern u1="Ë" u2="q" k="29" /> +<hkern u1="Ë" u2="p" k="14" /> +<hkern u1="Ë" u2="o" k="29" /> +<hkern u1="Ë" u2="n" k="14" /> +<hkern u1="Ë" u2="m" k="14" /> +<hkern u1="Ë" u2="g" k="29" /> +<hkern u1="Ë" u2="f" k="23" /> +<hkern u1="Ë" u2="e" k="29" /> +<hkern u1="Ë" u2="d" k="29" /> +<hkern u1="Ë" u2="c" k="29" /> +<hkern u1="Ë" u2="a" k="14" /> +<hkern u1="Ë" u2="Q" k="14" /> +<hkern u1="Ë" u2="O" k="14" /> +<hkern u1="Ë" u2="G" k="14" /> +<hkern u1="Ë" u2="C" k="14" /> +<hkern u1="Ë" u2="&" k="14" /> +<hkern u1="Ì" u2="ffl" k="16" /> +<hkern u1="Ì" u2="ffi" k="16" /> +<hkern u1="Ì" u2="fl" k="16" /> +<hkern u1="Ì" u2="fi" k="16" /> +<hkern u1="Ì" u2="ÿ" k="14" /> +<hkern u1="Ì" u2="þ" k="20" /> +<hkern u1="Ì" u2="ý" k="14" /> +<hkern u1="Ì" u2="ü" k="27" /> +<hkern u1="Ì" u2="û" k="27" /> +<hkern u1="Ì" u2="ú" k="27" /> +<hkern u1="Ì" u2="ù" k="27" /> +<hkern u1="Ì" u2="ø" k="29" /> +<hkern u1="Ì" u2="ö" k="29" /> +<hkern u1="Ì" u2="õ" k="29" /> +<hkern u1="Ì" u2="ô" k="29" /> +<hkern u1="Ì" u2="ó" k="29" /> +<hkern u1="Ì" u2="ò" k="29" /> +<hkern u1="Ì" u2="ñ" k="20" /> +<hkern u1="Ì" u2="ð" k="29" /> +<hkern u1="Ì" u2="ï" k="20" /> +<hkern u1="Ì" u2="î" k="20" /> +<hkern u1="Ì" u2="í" k="20" /> +<hkern u1="Ì" u2="ì" k="20" /> +<hkern u1="Ì" u2="ë" k="29" /> +<hkern u1="Ì" u2="ê" k="29" /> +<hkern u1="Ì" u2="é" k="29" /> +<hkern u1="Ì" u2="è" k="29" /> +<hkern u1="Ì" u2="ç" k="29" /> +<hkern u1="Ì" u2="æ" k="23" /> +<hkern u1="Ì" u2="å" k="23" /> +<hkern u1="Ì" u2="ä" k="23" /> +<hkern u1="Ì" u2="ã" k="23" /> +<hkern u1="Ì" u2="â" k="23" /> +<hkern u1="Ì" u2="á" k="23" /> +<hkern u1="Ì" u2="à" k="23" /> +<hkern u1="Ì" u2="ß" k="16" /> +<hkern u1="Ì" u2="Ý" k="10" /> +<hkern u1="Ì" u2="y" k="14" /> +<hkern u1="Ì" u2="v" k="18" /> +<hkern u1="Ì" u2="u" k="27" /> +<hkern u1="Ì" u2="t" k="23" /> +<hkern u1="Ì" u2="s" k="23" /> +<hkern u1="Ì" u2="r" k="20" /> +<hkern u1="Ì" u2="q" k="29" /> +<hkern u1="Ì" u2="p" k="20" /> +<hkern u1="Ì" u2="o" k="29" /> +<hkern u1="Ì" u2="n" k="20" /> +<hkern u1="Ì" u2="m" k="20" /> +<hkern u1="Ì" u2="k" k="20" /> +<hkern u1="Ì" u2="j" k="20" /> +<hkern u1="Ì" u2="i" k="20" /> +<hkern u1="Ì" u2="h" k="20" /> +<hkern u1="Ì" u2="g" k="29" /> +<hkern u1="Ì" u2="f" k="16" /> +<hkern u1="Ì" u2="e" k="29" /> +<hkern u1="Ì" u2="d" k="29" /> +<hkern u1="Ì" u2="c" k="29" /> +<hkern u1="Ì" u2="b" k="20" /> +<hkern u1="Ì" u2="a" k="23" /> +<hkern u1="Ì" u2="Y" k="10" /> +<hkern u1="Í" u2="ffl" k="16" /> +<hkern u1="Í" u2="ffi" k="16" /> +<hkern u1="Í" u2="fl" k="16" /> +<hkern u1="Í" u2="fi" k="16" /> +<hkern u1="Í" u2="ÿ" k="14" /> +<hkern u1="Í" u2="þ" k="20" /> +<hkern u1="Í" u2="ý" k="14" /> +<hkern u1="Í" u2="ü" k="27" /> +<hkern u1="Í" u2="û" k="27" /> +<hkern u1="Í" u2="ú" k="27" /> +<hkern u1="Í" u2="ù" k="27" /> +<hkern u1="Í" u2="ø" k="29" /> +<hkern u1="Í" u2="ö" k="29" /> +<hkern u1="Í" u2="õ" k="29" /> +<hkern u1="Í" u2="ô" k="29" /> +<hkern u1="Í" u2="ó" k="29" /> +<hkern u1="Í" u2="ò" k="29" /> +<hkern u1="Í" u2="ñ" k="20" /> +<hkern u1="Í" u2="ð" k="29" /> +<hkern u1="Í" u2="ï" k="20" /> +<hkern u1="Í" u2="î" k="20" /> +<hkern u1="Í" u2="í" k="20" /> +<hkern u1="Í" u2="ì" k="20" /> +<hkern u1="Í" u2="ë" k="29" /> +<hkern u1="Í" u2="ê" k="29" /> +<hkern u1="Í" u2="é" k="29" /> +<hkern u1="Í" u2="è" k="29" /> +<hkern u1="Í" u2="ç" k="29" /> +<hkern u1="Í" u2="æ" k="23" /> +<hkern u1="Í" u2="å" k="23" /> +<hkern u1="Í" u2="ä" k="23" /> +<hkern u1="Í" u2="ã" k="23" /> +<hkern u1="Í" u2="â" k="23" /> +<hkern u1="Í" u2="á" k="23" /> +<hkern u1="Í" u2="à" k="23" /> +<hkern u1="Í" u2="ß" k="16" /> +<hkern u1="Í" u2="Ý" k="10" /> +<hkern u1="Í" u2="y" k="14" /> +<hkern u1="Í" u2="v" k="18" /> +<hkern u1="Í" u2="u" k="27" /> +<hkern u1="Í" u2="t" k="23" /> +<hkern u1="Í" u2="s" k="23" /> +<hkern u1="Í" u2="r" k="20" /> +<hkern u1="Í" u2="q" k="29" /> +<hkern u1="Í" u2="p" k="20" /> +<hkern u1="Í" u2="o" k="29" /> +<hkern u1="Í" u2="n" k="20" /> +<hkern u1="Í" u2="m" k="20" /> +<hkern u1="Í" u2="k" k="20" /> +<hkern u1="Í" u2="j" k="20" /> +<hkern u1="Í" u2="i" k="20" /> +<hkern u1="Í" u2="h" k="20" /> +<hkern u1="Í" u2="g" k="29" /> +<hkern u1="Í" u2="f" k="16" /> +<hkern u1="Í" u2="e" k="29" /> +<hkern u1="Í" u2="d" k="29" /> +<hkern u1="Í" u2="c" k="29" /> +<hkern u1="Í" u2="b" k="20" /> +<hkern u1="Í" u2="a" k="23" /> +<hkern u1="Í" u2="Y" k="10" /> +<hkern u1="Î" u2="ffl" k="16" /> +<hkern u1="Î" u2="ffi" k="16" /> +<hkern u1="Î" u2="fl" k="16" /> +<hkern u1="Î" u2="fi" k="16" /> +<hkern u1="Î" u2="ÿ" k="14" /> +<hkern u1="Î" u2="þ" k="20" /> +<hkern u1="Î" u2="ý" k="14" /> +<hkern u1="Î" u2="ü" k="27" /> +<hkern u1="Î" u2="û" k="27" /> +<hkern u1="Î" u2="ú" k="27" /> +<hkern u1="Î" u2="ù" k="27" /> +<hkern u1="Î" u2="ø" k="29" /> +<hkern u1="Î" u2="ö" k="29" /> +<hkern u1="Î" u2="õ" k="29" /> +<hkern u1="Î" u2="ô" k="29" /> +<hkern u1="Î" u2="ó" k="29" /> +<hkern u1="Î" u2="ò" k="29" /> +<hkern u1="Î" u2="ñ" k="20" /> +<hkern u1="Î" u2="ð" k="29" /> +<hkern u1="Î" u2="ï" k="20" /> +<hkern u1="Î" u2="î" k="20" /> +<hkern u1="Î" u2="í" k="20" /> +<hkern u1="Î" u2="ì" k="20" /> +<hkern u1="Î" u2="ë" k="29" /> +<hkern u1="Î" u2="ê" k="29" /> +<hkern u1="Î" u2="é" k="29" /> +<hkern u1="Î" u2="è" k="29" /> +<hkern u1="Î" u2="ç" k="29" /> +<hkern u1="Î" u2="æ" k="23" /> +<hkern u1="Î" u2="å" k="23" /> +<hkern u1="Î" u2="ä" k="23" /> +<hkern u1="Î" u2="ã" k="23" /> +<hkern u1="Î" u2="â" k="23" /> +<hkern u1="Î" u2="á" k="23" /> +<hkern u1="Î" u2="à" k="23" /> +<hkern u1="Î" u2="ß" k="16" /> +<hkern u1="Î" u2="Ý" k="10" /> +<hkern u1="Î" u2="}" k="-23" /> +<hkern u1="Î" u2="y" k="14" /> +<hkern u1="Î" u2="v" k="18" /> +<hkern u1="Î" u2="u" k="27" /> +<hkern u1="Î" u2="t" k="23" /> +<hkern u1="Î" u2="s" k="23" /> +<hkern u1="Î" u2="r" k="20" /> +<hkern u1="Î" u2="q" k="29" /> +<hkern u1="Î" u2="p" k="20" /> +<hkern u1="Î" u2="o" k="29" /> +<hkern u1="Î" u2="n" k="20" /> +<hkern u1="Î" u2="m" k="20" /> +<hkern u1="Î" u2="k" k="20" /> +<hkern u1="Î" u2="j" k="20" /> +<hkern u1="Î" u2="i" k="20" /> +<hkern u1="Î" u2="h" k="20" /> +<hkern u1="Î" u2="g" k="29" /> +<hkern u1="Î" u2="f" k="16" /> +<hkern u1="Î" u2="e" k="29" /> +<hkern u1="Î" u2="d" k="29" /> +<hkern u1="Î" u2="c" k="29" /> +<hkern u1="Î" u2="b" k="20" /> +<hkern u1="Î" u2="a" k="23" /> +<hkern u1="Î" u2="Y" k="10" /> +<hkern u1="Î" u2=")" k="-35" /> +<hkern u1="Ï" u2="ffl" k="16" /> +<hkern u1="Ï" u2="ffi" k="16" /> +<hkern u1="Ï" u2="fl" k="16" /> +<hkern u1="Ï" u2="fi" k="16" /> +<hkern u1="Ï" u2="ÿ" k="14" /> +<hkern u1="Ï" u2="þ" k="20" /> +<hkern u1="Ï" u2="ý" k="14" /> +<hkern u1="Ï" u2="ü" k="27" /> +<hkern u1="Ï" u2="û" k="27" /> +<hkern u1="Ï" u2="ú" k="27" /> +<hkern u1="Ï" u2="ù" k="27" /> +<hkern u1="Ï" u2="ø" k="29" /> +<hkern u1="Ï" u2="ö" k="29" /> +<hkern u1="Ï" u2="õ" k="29" /> +<hkern u1="Ï" u2="ô" k="29" /> +<hkern u1="Ï" u2="ó" k="29" /> +<hkern u1="Ï" u2="ò" k="29" /> +<hkern u1="Ï" u2="ñ" k="20" /> +<hkern u1="Ï" u2="ð" k="29" /> +<hkern u1="Ï" u2="ï" k="20" /> +<hkern u1="Ï" u2="î" k="20" /> +<hkern u1="Ï" u2="í" k="20" /> +<hkern u1="Ï" u2="ì" k="20" /> +<hkern u1="Ï" u2="ë" k="29" /> +<hkern u1="Ï" u2="ê" k="29" /> +<hkern u1="Ï" u2="é" k="29" /> +<hkern u1="Ï" u2="è" k="29" /> +<hkern u1="Ï" u2="ç" k="29" /> +<hkern u1="Ï" u2="æ" k="23" /> +<hkern u1="Ï" u2="å" k="23" /> +<hkern u1="Ï" u2="ä" k="23" /> +<hkern u1="Ï" u2="ã" k="23" /> +<hkern u1="Ï" u2="â" k="23" /> +<hkern u1="Ï" u2="á" k="23" /> +<hkern u1="Ï" u2="à" k="23" /> +<hkern u1="Ï" u2="ß" k="16" /> +<hkern u1="Ï" u2="Ý" k="10" /> +<hkern u1="Ï" u2="y" k="14" /> +<hkern u1="Ï" u2="v" k="18" /> +<hkern u1="Ï" u2="u" k="27" /> +<hkern u1="Ï" u2="t" k="23" /> +<hkern u1="Ï" u2="s" k="23" /> +<hkern u1="Ï" u2="r" k="20" /> +<hkern u1="Ï" u2="q" k="29" /> +<hkern u1="Ï" u2="p" k="20" /> +<hkern u1="Ï" u2="o" k="29" /> +<hkern u1="Ï" u2="n" k="20" /> +<hkern u1="Ï" u2="m" k="20" /> +<hkern u1="Ï" u2="k" k="20" /> +<hkern u1="Ï" u2="j" k="20" /> +<hkern u1="Ï" u2="i" k="20" /> +<hkern u1="Ï" u2="h" k="20" /> +<hkern u1="Ï" u2="g" k="29" /> +<hkern u1="Ï" u2="f" k="16" /> +<hkern u1="Ï" u2="e" k="29" /> +<hkern u1="Ï" u2="d" k="29" /> +<hkern u1="Ï" u2="c" k="29" /> +<hkern u1="Ï" u2="b" k="20" /> +<hkern u1="Ï" u2="a" k="23" /> +<hkern u1="Ï" u2="Y" k="10" /> +<hkern u1="Ð" u2="™" k="16" /> +<hkern u1="Ð" u2="…" k="39" /> +<hkern u1="Ð" u2="„" k="39" /> +<hkern u1="Ð" u2="‚" k="39" /> +<hkern u1="Ð" u2="þ" k="18" /> +<hkern u1="Ð" u2="ü" k="16" /> +<hkern u1="Ð" u2="û" k="16" /> +<hkern u1="Ð" u2="ú" k="16" /> +<hkern u1="Ð" u2="ù" k="16" /> +<hkern u1="Ð" u2="ø" k="12" /> +<hkern u1="Ð" u2="ö" k="12" /> +<hkern u1="Ð" u2="õ" k="12" /> +<hkern u1="Ð" u2="ô" k="12" /> +<hkern u1="Ð" u2="ó" k="12" /> +<hkern u1="Ð" u2="ò" k="12" /> +<hkern u1="Ð" u2="ñ" k="18" /> +<hkern u1="Ð" u2="ð" k="12" /> +<hkern u1="Ð" u2="ï" k="20" /> +<hkern u1="Ð" u2="î" k="20" /> +<hkern u1="Ð" u2="í" k="20" /> +<hkern u1="Ð" u2="ì" k="20" /> +<hkern u1="Ð" u2="ë" k="12" /> +<hkern u1="Ð" u2="ê" k="12" /> +<hkern u1="Ð" u2="é" k="12" /> +<hkern u1="Ð" u2="è" k="12" /> +<hkern u1="Ð" u2="ç" k="12" /> +<hkern u1="Ð" u2="æ" k="20" /> +<hkern u1="Ð" u2="å" k="20" /> +<hkern u1="Ð" u2="ä" k="20" /> +<hkern u1="Ð" u2="ã" k="20" /> +<hkern u1="Ð" u2="â" k="20" /> +<hkern u1="Ð" u2="á" k="20" /> +<hkern u1="Ð" u2="à" k="20" /> +<hkern u1="Ð" u2="Ý" k="68" /> +<hkern u1="Ð" u2="Æ" k="96" /> +<hkern u1="Ð" u2="Å" k="31" /> +<hkern u1="Ð" u2="Ä" k="31" /> +<hkern u1="Ð" u2="Ã" k="31" /> +<hkern u1="Ð" u2="Â" k="31" /> +<hkern u1="Ð" u2="Á" k="31" /> +<hkern u1="Ð" u2="À" k="31" /> +<hkern u1="Ð" u2="}" k="37" /> +<hkern u1="Ð" u2="x" k="27" /> +<hkern u1="Ð" u2="u" k="16" /> +<hkern u1="Ð" u2="s" k="12" /> +<hkern u1="Ð" u2="r" k="18" /> +<hkern u1="Ð" u2="q" k="12" /> +<hkern u1="Ð" u2="p" k="18" /> +<hkern u1="Ð" u2="o" k="12" /> +<hkern u1="Ð" u2="n" k="18" /> +<hkern u1="Ð" u2="m" k="18" /> +<hkern u1="Ð" u2="k" k="18" /> +<hkern u1="Ð" u2="j" k="20" /> +<hkern u1="Ð" u2="i" k="20" /> +<hkern u1="Ð" u2="h" k="18" /> +<hkern u1="Ð" u2="g" k="12" /> +<hkern u1="Ð" u2="e" k="12" /> +<hkern u1="Ð" u2="d" k="12" /> +<hkern u1="Ð" u2="c" k="12" /> +<hkern u1="Ð" u2="b" k="18" /> +<hkern u1="Ð" u2="a" k="20" /> +<hkern u1="Ð" u2="]" k="37" /> +<hkern u1="Ð" u2="Y" k="68" /> +<hkern u1="Ð" u2="X" k="57" /> +<hkern u1="Ð" u2="V" k="29" /> +<hkern u1="Ð" u2="T" k="57" /> +<hkern u1="Ð" u2="A" k="31" /> +<hkern u1="Ð" u2="/" k="20" /> +<hkern u1="Ð" u2="." k="39" /> +<hkern u1="Ð" u2="," k="39" /> +<hkern u1="Ð" u2=")" k="43" /> +<hkern u1="Ñ" u2="ffl" k="16" /> +<hkern u1="Ñ" u2="ffi" k="16" /> +<hkern u1="Ñ" u2="fl" k="16" /> +<hkern u1="Ñ" u2="fi" k="16" /> +<hkern u1="Ñ" u2="ÿ" k="14" /> +<hkern u1="Ñ" u2="þ" k="20" /> +<hkern u1="Ñ" u2="ý" k="14" /> +<hkern u1="Ñ" u2="ü" k="27" /> +<hkern u1="Ñ" u2="û" k="27" /> +<hkern u1="Ñ" u2="ú" k="27" /> +<hkern u1="Ñ" u2="ù" k="27" /> +<hkern u1="Ñ" u2="ø" k="29" /> +<hkern u1="Ñ" u2="ö" k="29" /> +<hkern u1="Ñ" u2="õ" k="29" /> +<hkern u1="Ñ" u2="ô" k="29" /> +<hkern u1="Ñ" u2="ó" k="29" /> +<hkern u1="Ñ" u2="ò" k="29" /> +<hkern u1="Ñ" u2="ñ" k="20" /> +<hkern u1="Ñ" u2="ð" k="29" /> +<hkern u1="Ñ" u2="ï" k="20" /> +<hkern u1="Ñ" u2="î" k="20" /> +<hkern u1="Ñ" u2="í" k="20" /> +<hkern u1="Ñ" u2="ì" k="20" /> +<hkern u1="Ñ" u2="ë" k="29" /> +<hkern u1="Ñ" u2="ê" k="29" /> +<hkern u1="Ñ" u2="é" k="29" /> +<hkern u1="Ñ" u2="è" k="29" /> +<hkern u1="Ñ" u2="ç" k="29" /> +<hkern u1="Ñ" u2="æ" k="23" /> +<hkern u1="Ñ" u2="å" k="23" /> +<hkern u1="Ñ" u2="ä" k="23" /> +<hkern u1="Ñ" u2="ã" k="23" /> +<hkern u1="Ñ" u2="â" k="23" /> +<hkern u1="Ñ" u2="á" k="23" /> +<hkern u1="Ñ" u2="à" k="23" /> +<hkern u1="Ñ" u2="ß" k="16" /> +<hkern u1="Ñ" u2="Ý" k="10" /> +<hkern u1="Ñ" u2="y" k="14" /> +<hkern u1="Ñ" u2="v" k="18" /> +<hkern u1="Ñ" u2="u" k="27" /> +<hkern u1="Ñ" u2="t" k="23" /> +<hkern u1="Ñ" u2="s" k="23" /> +<hkern u1="Ñ" u2="r" k="20" /> +<hkern u1="Ñ" u2="q" k="29" /> +<hkern u1="Ñ" u2="p" k="20" /> +<hkern u1="Ñ" u2="o" k="29" /> +<hkern u1="Ñ" u2="n" k="20" /> +<hkern u1="Ñ" u2="m" k="20" /> +<hkern u1="Ñ" u2="k" k="20" /> +<hkern u1="Ñ" u2="j" k="20" /> +<hkern u1="Ñ" u2="i" k="20" /> +<hkern u1="Ñ" u2="h" k="20" /> +<hkern u1="Ñ" u2="g" k="29" /> +<hkern u1="Ñ" u2="f" k="16" /> +<hkern u1="Ñ" u2="e" k="29" /> +<hkern u1="Ñ" u2="d" k="29" /> +<hkern u1="Ñ" u2="c" k="29" /> +<hkern u1="Ñ" u2="b" k="20" /> +<hkern u1="Ñ" u2="a" k="23" /> +<hkern u1="Ñ" u2="Y" k="10" /> +<hkern u1="Ò" u2="™" k="16" /> +<hkern u1="Ò" u2="…" k="39" /> +<hkern u1="Ò" u2="„" k="39" /> +<hkern u1="Ò" u2="‚" k="39" /> +<hkern u1="Ò" u2="þ" k="18" /> +<hkern u1="Ò" u2="ü" k="16" /> +<hkern u1="Ò" u2="û" k="16" /> +<hkern u1="Ò" u2="ú" k="16" /> +<hkern u1="Ò" u2="ù" k="16" /> +<hkern u1="Ò" u2="ø" k="12" /> +<hkern u1="Ò" u2="ö" k="12" /> +<hkern u1="Ò" u2="õ" k="12" /> +<hkern u1="Ò" u2="ô" k="12" /> +<hkern u1="Ò" u2="ó" k="12" /> +<hkern u1="Ò" u2="ò" k="12" /> +<hkern u1="Ò" u2="ñ" k="18" /> +<hkern u1="Ò" u2="ð" k="12" /> +<hkern u1="Ò" u2="ï" k="20" /> +<hkern u1="Ò" u2="î" k="20" /> +<hkern u1="Ò" u2="í" k="20" /> +<hkern u1="Ò" u2="ì" k="20" /> +<hkern u1="Ò" u2="ë" k="12" /> +<hkern u1="Ò" u2="ê" k="12" /> +<hkern u1="Ò" u2="é" k="12" /> +<hkern u1="Ò" u2="è" k="12" /> +<hkern u1="Ò" u2="ç" k="12" /> +<hkern u1="Ò" u2="æ" k="20" /> +<hkern u1="Ò" u2="å" k="20" /> +<hkern u1="Ò" u2="ä" k="20" /> +<hkern u1="Ò" u2="ã" k="20" /> +<hkern u1="Ò" u2="â" k="20" /> +<hkern u1="Ò" u2="á" k="20" /> +<hkern u1="Ò" u2="à" k="20" /> +<hkern u1="Ò" u2="Ý" k="63" /> +<hkern u1="Ò" u2="Æ" k="90" /> +<hkern u1="Ò" u2="Å" k="29" /> +<hkern u1="Ò" u2="Ä" k="29" /> +<hkern u1="Ò" u2="Ã" k="29" /> +<hkern u1="Ò" u2="Â" k="29" /> +<hkern u1="Ò" u2="Á" k="29" /> +<hkern u1="Ò" u2="À" k="29" /> +<hkern u1="Ò" u2="}" k="35" /> +<hkern u1="Ò" u2="x" k="27" /> +<hkern u1="Ò" u2="u" k="16" /> +<hkern u1="Ò" u2="s" k="12" /> +<hkern u1="Ò" u2="r" k="18" /> +<hkern u1="Ò" u2="q" k="12" /> +<hkern u1="Ò" u2="p" k="18" /> +<hkern u1="Ò" u2="o" k="12" /> +<hkern u1="Ò" u2="n" k="18" /> +<hkern u1="Ò" u2="m" k="18" /> +<hkern u1="Ò" u2="k" k="18" /> +<hkern u1="Ò" u2="j" k="20" /> +<hkern u1="Ò" u2="i" k="20" /> +<hkern u1="Ò" u2="h" k="18" /> +<hkern u1="Ò" u2="g" k="12" /> +<hkern u1="Ò" u2="e" k="12" /> +<hkern u1="Ò" u2="d" k="12" /> +<hkern u1="Ò" u2="c" k="12" /> +<hkern u1="Ò" u2="b" k="18" /> +<hkern u1="Ò" u2="a" k="20" /> +<hkern u1="Ò" u2="]" k="37" /> +<hkern u1="Ò" u2="Y" k="63" /> +<hkern u1="Ò" u2="X" k="53" /> +<hkern u1="Ò" u2="V" k="27" /> +<hkern u1="Ò" u2="T" k="49" /> +<hkern u1="Ò" u2="A" k="29" /> +<hkern u1="Ò" u2="." k="39" /> +<hkern u1="Ò" u2="," k="39" /> +<hkern u1="Ò" u2=")" k="43" /> +<hkern u1="Ó" u2="™" k="16" /> +<hkern u1="Ó" u2="…" k="39" /> +<hkern u1="Ó" u2="„" k="39" /> +<hkern u1="Ó" u2="‚" k="39" /> +<hkern u1="Ó" u2="þ" k="18" /> +<hkern u1="Ó" u2="ü" k="16" /> +<hkern u1="Ó" u2="û" k="16" /> +<hkern u1="Ó" u2="ú" k="16" /> +<hkern u1="Ó" u2="ù" k="16" /> +<hkern u1="Ó" u2="ø" k="12" /> +<hkern u1="Ó" u2="ö" k="12" /> +<hkern u1="Ó" u2="õ" k="12" /> +<hkern u1="Ó" u2="ô" k="12" /> +<hkern u1="Ó" u2="ó" k="12" /> +<hkern u1="Ó" u2="ò" k="12" /> +<hkern u1="Ó" u2="ñ" k="18" /> +<hkern u1="Ó" u2="ð" k="12" /> +<hkern u1="Ó" u2="ï" k="20" /> +<hkern u1="Ó" u2="î" k="20" /> +<hkern u1="Ó" u2="í" k="20" /> +<hkern u1="Ó" u2="ì" k="20" /> +<hkern u1="Ó" u2="ë" k="12" /> +<hkern u1="Ó" u2="ê" k="12" /> +<hkern u1="Ó" u2="é" k="12" /> +<hkern u1="Ó" u2="è" k="12" /> +<hkern u1="Ó" u2="ç" k="12" /> +<hkern u1="Ó" u2="æ" k="20" /> +<hkern u1="Ó" u2="å" k="20" /> +<hkern u1="Ó" u2="ä" k="20" /> +<hkern u1="Ó" u2="ã" k="20" /> +<hkern u1="Ó" u2="â" k="20" /> +<hkern u1="Ó" u2="á" k="20" /> +<hkern u1="Ó" u2="à" k="20" /> +<hkern u1="Ó" u2="Ý" k="63" /> +<hkern u1="Ó" u2="Æ" k="90" /> +<hkern u1="Ó" u2="Å" k="29" /> +<hkern u1="Ó" u2="Ä" k="29" /> +<hkern u1="Ó" u2="Ã" k="29" /> +<hkern u1="Ó" u2="Â" k="29" /> +<hkern u1="Ó" u2="Á" k="29" /> +<hkern u1="Ó" u2="À" k="29" /> +<hkern u1="Ó" u2="}" k="35" /> +<hkern u1="Ó" u2="x" k="27" /> +<hkern u1="Ó" u2="u" k="16" /> +<hkern u1="Ó" u2="s" k="12" /> +<hkern u1="Ó" u2="r" k="18" /> +<hkern u1="Ó" u2="q" k="12" /> +<hkern u1="Ó" u2="p" k="18" /> +<hkern u1="Ó" u2="o" k="12" /> +<hkern u1="Ó" u2="n" k="18" /> +<hkern u1="Ó" u2="m" k="18" /> +<hkern u1="Ó" u2="k" k="18" /> +<hkern u1="Ó" u2="j" k="20" /> +<hkern u1="Ó" u2="i" k="20" /> +<hkern u1="Ó" u2="h" k="18" /> +<hkern u1="Ó" u2="g" k="12" /> +<hkern u1="Ó" u2="e" k="12" /> +<hkern u1="Ó" u2="d" k="12" /> +<hkern u1="Ó" u2="c" k="12" /> +<hkern u1="Ó" u2="b" k="18" /> +<hkern u1="Ó" u2="a" k="20" /> +<hkern u1="Ó" u2="]" k="37" /> +<hkern u1="Ó" u2="Y" k="63" /> +<hkern u1="Ó" u2="X" k="53" /> +<hkern u1="Ó" u2="V" k="27" /> +<hkern u1="Ó" u2="T" k="49" /> +<hkern u1="Ó" u2="A" k="29" /> +<hkern u1="Ó" u2="." k="39" /> +<hkern u1="Ó" u2="," k="39" /> +<hkern u1="Ó" u2=")" k="43" /> +<hkern u1="Ô" u2="™" k="16" /> +<hkern u1="Ô" u2="…" k="39" /> +<hkern u1="Ô" u2="„" k="39" /> +<hkern u1="Ô" u2="‚" k="39" /> +<hkern u1="Ô" u2="þ" k="18" /> +<hkern u1="Ô" u2="ü" k="16" /> +<hkern u1="Ô" u2="û" k="16" /> +<hkern u1="Ô" u2="ú" k="16" /> +<hkern u1="Ô" u2="ù" k="16" /> +<hkern u1="Ô" u2="ø" k="12" /> +<hkern u1="Ô" u2="ö" k="12" /> +<hkern u1="Ô" u2="õ" k="12" /> +<hkern u1="Ô" u2="ô" k="12" /> +<hkern u1="Ô" u2="ó" k="12" /> +<hkern u1="Ô" u2="ò" k="12" /> +<hkern u1="Ô" u2="ñ" k="18" /> +<hkern u1="Ô" u2="ð" k="12" /> +<hkern u1="Ô" u2="ï" k="20" /> +<hkern u1="Ô" u2="î" k="20" /> +<hkern u1="Ô" u2="í" k="20" /> +<hkern u1="Ô" u2="ì" k="20" /> +<hkern u1="Ô" u2="ë" k="12" /> +<hkern u1="Ô" u2="ê" k="12" /> +<hkern u1="Ô" u2="é" k="12" /> +<hkern u1="Ô" u2="è" k="12" /> +<hkern u1="Ô" u2="ç" k="12" /> +<hkern u1="Ô" u2="æ" k="20" /> +<hkern u1="Ô" u2="å" k="20" /> +<hkern u1="Ô" u2="ä" k="20" /> +<hkern u1="Ô" u2="ã" k="20" /> +<hkern u1="Ô" u2="â" k="20" /> +<hkern u1="Ô" u2="á" k="20" /> +<hkern u1="Ô" u2="à" k="20" /> +<hkern u1="Ô" u2="Ý" k="63" /> +<hkern u1="Ô" u2="Æ" k="90" /> +<hkern u1="Ô" u2="Å" k="29" /> +<hkern u1="Ô" u2="Ä" k="29" /> +<hkern u1="Ô" u2="Ã" k="29" /> +<hkern u1="Ô" u2="Â" k="29" /> +<hkern u1="Ô" u2="Á" k="29" /> +<hkern u1="Ô" u2="À" k="29" /> +<hkern u1="Ô" u2="}" k="35" /> +<hkern u1="Ô" u2="x" k="27" /> +<hkern u1="Ô" u2="u" k="16" /> +<hkern u1="Ô" u2="s" k="12" /> +<hkern u1="Ô" u2="r" k="18" /> +<hkern u1="Ô" u2="q" k="12" /> +<hkern u1="Ô" u2="p" k="18" /> +<hkern u1="Ô" u2="o" k="12" /> +<hkern u1="Ô" u2="n" k="18" /> +<hkern u1="Ô" u2="m" k="18" /> +<hkern u1="Ô" u2="k" k="18" /> +<hkern u1="Ô" u2="j" k="20" /> +<hkern u1="Ô" u2="i" k="20" /> +<hkern u1="Ô" u2="h" k="18" /> +<hkern u1="Ô" u2="g" k="12" /> +<hkern u1="Ô" u2="e" k="12" /> +<hkern u1="Ô" u2="d" k="12" /> +<hkern u1="Ô" u2="c" k="12" /> +<hkern u1="Ô" u2="b" k="18" /> +<hkern u1="Ô" u2="a" k="20" /> +<hkern u1="Ô" u2="]" k="37" /> +<hkern u1="Ô" u2="Y" k="63" /> +<hkern u1="Ô" u2="X" k="53" /> +<hkern u1="Ô" u2="V" k="27" /> +<hkern u1="Ô" u2="T" k="49" /> +<hkern u1="Ô" u2="A" k="29" /> +<hkern u1="Ô" u2="." k="39" /> +<hkern u1="Ô" u2="," k="39" /> +<hkern u1="Ô" u2=")" k="43" /> +<hkern u1="Õ" u2="™" k="16" /> +<hkern u1="Õ" u2="…" k="39" /> +<hkern u1="Õ" u2="„" k="39" /> +<hkern u1="Õ" u2="‚" k="39" /> +<hkern u1="Õ" u2="þ" k="18" /> +<hkern u1="Õ" u2="ü" k="16" /> +<hkern u1="Õ" u2="û" k="16" /> +<hkern u1="Õ" u2="ú" k="16" /> +<hkern u1="Õ" u2="ù" k="16" /> +<hkern u1="Õ" u2="ø" k="12" /> +<hkern u1="Õ" u2="ö" k="12" /> +<hkern u1="Õ" u2="õ" k="12" /> +<hkern u1="Õ" u2="ô" k="12" /> +<hkern u1="Õ" u2="ó" k="12" /> +<hkern u1="Õ" u2="ò" k="12" /> +<hkern u1="Õ" u2="ñ" k="18" /> +<hkern u1="Õ" u2="ð" k="12" /> +<hkern u1="Õ" u2="ï" k="20" /> +<hkern u1="Õ" u2="î" k="20" /> +<hkern u1="Õ" u2="í" k="20" /> +<hkern u1="Õ" u2="ì" k="20" /> +<hkern u1="Õ" u2="ë" k="12" /> +<hkern u1="Õ" u2="ê" k="12" /> +<hkern u1="Õ" u2="é" k="12" /> +<hkern u1="Õ" u2="è" k="12" /> +<hkern u1="Õ" u2="ç" k="12" /> +<hkern u1="Õ" u2="æ" k="20" /> +<hkern u1="Õ" u2="å" k="20" /> +<hkern u1="Õ" u2="ä" k="20" /> +<hkern u1="Õ" u2="ã" k="20" /> +<hkern u1="Õ" u2="â" k="20" /> +<hkern u1="Õ" u2="á" k="20" /> +<hkern u1="Õ" u2="à" k="20" /> +<hkern u1="Õ" u2="Ý" k="63" /> +<hkern u1="Õ" u2="Æ" k="90" /> +<hkern u1="Õ" u2="Å" k="29" /> +<hkern u1="Õ" u2="Ä" k="29" /> +<hkern u1="Õ" u2="Ã" k="29" /> +<hkern u1="Õ" u2="Â" k="29" /> +<hkern u1="Õ" u2="Á" k="29" /> +<hkern u1="Õ" u2="À" k="29" /> +<hkern u1="Õ" u2="}" k="35" /> +<hkern u1="Õ" u2="x" k="27" /> +<hkern u1="Õ" u2="u" k="16" /> +<hkern u1="Õ" u2="s" k="12" /> +<hkern u1="Õ" u2="r" k="18" /> +<hkern u1="Õ" u2="q" k="12" /> +<hkern u1="Õ" u2="p" k="18" /> +<hkern u1="Õ" u2="o" k="12" /> +<hkern u1="Õ" u2="n" k="18" /> +<hkern u1="Õ" u2="m" k="18" /> +<hkern u1="Õ" u2="k" k="18" /> +<hkern u1="Õ" u2="j" k="20" /> +<hkern u1="Õ" u2="i" k="20" /> +<hkern u1="Õ" u2="h" k="18" /> +<hkern u1="Õ" u2="g" k="12" /> +<hkern u1="Õ" u2="e" k="12" /> +<hkern u1="Õ" u2="d" k="12" /> +<hkern u1="Õ" u2="c" k="12" /> +<hkern u1="Õ" u2="b" k="18" /> +<hkern u1="Õ" u2="a" k="20" /> +<hkern u1="Õ" u2="]" k="37" /> +<hkern u1="Õ" u2="Y" k="63" /> +<hkern u1="Õ" u2="X" k="53" /> +<hkern u1="Õ" u2="V" k="27" /> +<hkern u1="Õ" u2="T" k="49" /> +<hkern u1="Õ" u2="A" k="29" /> +<hkern u1="Õ" u2="." k="39" /> +<hkern u1="Õ" u2="," k="39" /> +<hkern u1="Õ" u2=")" k="43" /> +<hkern u1="Ö" u2="™" k="16" /> +<hkern u1="Ö" u2="…" k="39" /> +<hkern u1="Ö" u2="„" k="39" /> +<hkern u1="Ö" u2="‚" k="39" /> +<hkern u1="Ö" u2="þ" k="18" /> +<hkern u1="Ö" u2="ü" k="16" /> +<hkern u1="Ö" u2="û" k="16" /> +<hkern u1="Ö" u2="ú" k="16" /> +<hkern u1="Ö" u2="ù" k="16" /> +<hkern u1="Ö" u2="ø" k="12" /> +<hkern u1="Ö" u2="ö" k="12" /> +<hkern u1="Ö" u2="õ" k="12" /> +<hkern u1="Ö" u2="ô" k="12" /> +<hkern u1="Ö" u2="ó" k="12" /> +<hkern u1="Ö" u2="ò" k="12" /> +<hkern u1="Ö" u2="ñ" k="18" /> +<hkern u1="Ö" u2="ð" k="12" /> +<hkern u1="Ö" u2="ï" k="20" /> +<hkern u1="Ö" u2="î" k="20" /> +<hkern u1="Ö" u2="í" k="20" /> +<hkern u1="Ö" u2="ì" k="20" /> +<hkern u1="Ö" u2="ë" k="12" /> +<hkern u1="Ö" u2="ê" k="12" /> +<hkern u1="Ö" u2="é" k="12" /> +<hkern u1="Ö" u2="è" k="12" /> +<hkern u1="Ö" u2="ç" k="12" /> +<hkern u1="Ö" u2="æ" k="20" /> +<hkern u1="Ö" u2="å" k="20" /> +<hkern u1="Ö" u2="ä" k="20" /> +<hkern u1="Ö" u2="ã" k="20" /> +<hkern u1="Ö" u2="â" k="20" /> +<hkern u1="Ö" u2="á" k="20" /> +<hkern u1="Ö" u2="à" k="20" /> +<hkern u1="Ö" u2="Ý" k="63" /> +<hkern u1="Ö" u2="Æ" k="90" /> +<hkern u1="Ö" u2="Å" k="29" /> +<hkern u1="Ö" u2="Ä" k="29" /> +<hkern u1="Ö" u2="Ã" k="29" /> +<hkern u1="Ö" u2="Â" k="29" /> +<hkern u1="Ö" u2="Á" k="29" /> +<hkern u1="Ö" u2="À" k="29" /> +<hkern u1="Ö" u2="}" k="35" /> +<hkern u1="Ö" u2="x" k="27" /> +<hkern u1="Ö" u2="u" k="16" /> +<hkern u1="Ö" u2="s" k="12" /> +<hkern u1="Ö" u2="r" k="18" /> +<hkern u1="Ö" u2="q" k="12" /> +<hkern u1="Ö" u2="p" k="18" /> +<hkern u1="Ö" u2="o" k="12" /> +<hkern u1="Ö" u2="n" k="18" /> +<hkern u1="Ö" u2="m" k="18" /> +<hkern u1="Ö" u2="k" k="18" /> +<hkern u1="Ö" u2="j" k="20" /> +<hkern u1="Ö" u2="i" k="20" /> +<hkern u1="Ö" u2="h" k="18" /> +<hkern u1="Ö" u2="g" k="12" /> +<hkern u1="Ö" u2="e" k="12" /> +<hkern u1="Ö" u2="d" k="12" /> +<hkern u1="Ö" u2="c" k="12" /> +<hkern u1="Ö" u2="b" k="18" /> +<hkern u1="Ö" u2="a" k="20" /> +<hkern u1="Ö" u2="]" k="37" /> +<hkern u1="Ö" u2="Y" k="63" /> +<hkern u1="Ö" u2="X" k="53" /> +<hkern u1="Ö" u2="V" k="27" /> +<hkern u1="Ö" u2="T" k="49" /> +<hkern u1="Ö" u2="A" k="29" /> +<hkern u1="Ö" u2="." k="39" /> +<hkern u1="Ö" u2="," k="39" /> +<hkern u1="Ö" u2=")" k="43" /> +<hkern u1="Ø" u2="™" k="16" /> +<hkern u1="Ø" u2="…" k="39" /> +<hkern u1="Ø" u2="„" k="39" /> +<hkern u1="Ø" u2="‚" k="39" /> +<hkern u1="Ø" u2="þ" k="18" /> +<hkern u1="Ø" u2="ü" k="16" /> +<hkern u1="Ø" u2="û" k="16" /> +<hkern u1="Ø" u2="ú" k="16" /> +<hkern u1="Ø" u2="ù" k="16" /> +<hkern u1="Ø" u2="ø" k="12" /> +<hkern u1="Ø" u2="ö" k="12" /> +<hkern u1="Ø" u2="õ" k="12" /> +<hkern u1="Ø" u2="ô" k="12" /> +<hkern u1="Ø" u2="ó" k="12" /> +<hkern u1="Ø" u2="ò" k="12" /> +<hkern u1="Ø" u2="ñ" k="18" /> +<hkern u1="Ø" u2="ð" k="12" /> +<hkern u1="Ø" u2="ï" k="20" /> +<hkern u1="Ø" u2="î" k="20" /> +<hkern u1="Ø" u2="í" k="20" /> +<hkern u1="Ø" u2="ì" k="20" /> +<hkern u1="Ø" u2="ë" k="12" /> +<hkern u1="Ø" u2="ê" k="12" /> +<hkern u1="Ø" u2="é" k="12" /> +<hkern u1="Ø" u2="è" k="12" /> +<hkern u1="Ø" u2="ç" k="12" /> +<hkern u1="Ø" u2="æ" k="20" /> +<hkern u1="Ø" u2="å" k="20" /> +<hkern u1="Ø" u2="ä" k="20" /> +<hkern u1="Ø" u2="ã" k="20" /> +<hkern u1="Ø" u2="â" k="20" /> +<hkern u1="Ø" u2="á" k="20" /> +<hkern u1="Ø" u2="à" k="20" /> +<hkern u1="Ø" u2="Ý" k="63" /> +<hkern u1="Ø" u2="Æ" k="90" /> +<hkern u1="Ø" u2="Å" k="29" /> +<hkern u1="Ø" u2="Ä" k="29" /> +<hkern u1="Ø" u2="Ã" k="29" /> +<hkern u1="Ø" u2="Â" k="29" /> +<hkern u1="Ø" u2="Á" k="29" /> +<hkern u1="Ø" u2="À" k="29" /> +<hkern u1="Ø" u2="}" k="35" /> +<hkern u1="Ø" u2="x" k="27" /> +<hkern u1="Ø" u2="u" k="16" /> +<hkern u1="Ø" u2="s" k="12" /> +<hkern u1="Ø" u2="r" k="18" /> +<hkern u1="Ø" u2="q" k="12" /> +<hkern u1="Ø" u2="p" k="18" /> +<hkern u1="Ø" u2="o" k="12" /> +<hkern u1="Ø" u2="n" k="18" /> +<hkern u1="Ø" u2="m" k="18" /> +<hkern u1="Ø" u2="k" k="18" /> +<hkern u1="Ø" u2="j" k="20" /> +<hkern u1="Ø" u2="i" k="20" /> +<hkern u1="Ø" u2="h" k="18" /> +<hkern u1="Ø" u2="g" k="12" /> +<hkern u1="Ø" u2="e" k="12" /> +<hkern u1="Ø" u2="d" k="12" /> +<hkern u1="Ø" u2="c" k="12" /> +<hkern u1="Ø" u2="b" k="18" /> +<hkern u1="Ø" u2="a" k="20" /> +<hkern u1="Ø" u2="]" k="37" /> +<hkern u1="Ø" u2="Y" k="63" /> +<hkern u1="Ø" u2="X" k="53" /> +<hkern u1="Ø" u2="V" k="27" /> +<hkern u1="Ø" u2="T" k="49" /> +<hkern u1="Ø" u2="A" k="29" /> +<hkern u1="Ø" u2="." k="39" /> +<hkern u1="Ø" u2="," k="39" /> +<hkern u1="Ø" u2=")" k="43" /> +<hkern u1="Ù" u2="ffl" k="16" /> +<hkern u1="Ù" u2="ffi" k="16" /> +<hkern u1="Ù" u2="fl" k="16" /> +<hkern u1="Ù" u2="fi" k="16" /> +<hkern u1="Ù" u2="…" k="37" /> +<hkern u1="Ù" u2="„" k="37" /> +<hkern u1="Ù" u2="‚" k="37" /> +<hkern u1="Ù" u2="ÿ" k="12" /> +<hkern u1="Ù" u2="þ" k="27" /> +<hkern u1="Ù" u2="ý" k="12" /> +<hkern u1="Ù" u2="ü" k="37" /> +<hkern u1="Ù" u2="û" k="37" /> +<hkern u1="Ù" u2="ú" k="37" /> +<hkern u1="Ù" u2="ù" k="37" /> +<hkern u1="Ù" u2="ø" k="31" /> +<hkern u1="Ù" u2="ö" k="31" /> +<hkern u1="Ù" u2="õ" k="31" /> +<hkern u1="Ù" u2="ô" k="31" /> +<hkern u1="Ù" u2="ó" k="31" /> +<hkern u1="Ù" u2="ò" k="31" /> +<hkern u1="Ù" u2="ñ" k="37" /> +<hkern u1="Ù" u2="ð" k="31" /> +<hkern u1="Ù" u2="ï" k="31" /> +<hkern u1="Ù" u2="î" k="31" /> +<hkern u1="Ù" u2="í" k="31" /> +<hkern u1="Ù" u2="ì" k="31" /> +<hkern u1="Ù" u2="ë" k="31" /> +<hkern u1="Ù" u2="ê" k="31" /> +<hkern u1="Ù" u2="é" k="31" /> +<hkern u1="Ù" u2="è" k="31" /> +<hkern u1="Ù" u2="ç" k="31" /> +<hkern u1="Ù" u2="æ" k="35" /> +<hkern u1="Ù" u2="å" k="35" /> +<hkern u1="Ù" u2="ä" k="35" /> +<hkern u1="Ù" u2="ã" k="35" /> +<hkern u1="Ù" u2="â" k="35" /> +<hkern u1="Ù" u2="á" k="35" /> +<hkern u1="Ù" u2="à" k="35" /> +<hkern u1="Ù" u2="ß" k="16" /> +<hkern u1="Ù" u2="Æ" k="20" /> +<hkern u1="Ù" u2="Å" k="41" /> +<hkern u1="Ù" u2="Ä" k="41" /> +<hkern u1="Ù" u2="Ã" k="41" /> +<hkern u1="Ù" u2="Â" k="41" /> +<hkern u1="Ù" u2="Á" k="41" /> +<hkern u1="Ù" u2="À" k="41" /> +<hkern u1="Ù" u2="y" k="12" /> +<hkern u1="Ù" u2="x" k="20" /> +<hkern u1="Ù" u2="v" k="16" /> +<hkern u1="Ù" u2="u" k="37" /> +<hkern u1="Ù" u2="t" k="20" /> +<hkern u1="Ù" u2="s" k="33" /> +<hkern u1="Ù" u2="r" k="37" /> +<hkern u1="Ù" u2="q" k="31" /> +<hkern u1="Ù" u2="p" k="37" /> +<hkern u1="Ù" u2="o" k="31" /> +<hkern u1="Ù" u2="n" k="37" /> +<hkern u1="Ù" u2="m" k="37" /> +<hkern u1="Ù" u2="k" k="27" /> +<hkern u1="Ù" u2="j" k="31" /> +<hkern u1="Ù" u2="i" k="31" /> +<hkern u1="Ù" u2="h" k="27" /> +<hkern u1="Ù" u2="g" k="31" /> +<hkern u1="Ù" u2="f" k="16" /> +<hkern u1="Ù" u2="e" k="31" /> +<hkern u1="Ù" u2="d" k="31" /> +<hkern u1="Ù" u2="c" k="31" /> +<hkern u1="Ù" u2="b" k="27" /> +<hkern u1="Ù" u2="a" k="35" /> +<hkern u1="Ù" u2="A" k="41" /> +<hkern u1="Ù" u2="/" k="29" /> +<hkern u1="Ù" u2="." k="37" /> +<hkern u1="Ù" u2="," k="37" /> +<hkern u1="Ù" u2=")" k="23" /> +<hkern u1="Ú" u2="ffl" k="16" /> +<hkern u1="Ú" u2="ffi" k="16" /> +<hkern u1="Ú" u2="fl" k="16" /> +<hkern u1="Ú" u2="fi" k="16" /> +<hkern u1="Ú" u2="…" k="37" /> +<hkern u1="Ú" u2="„" k="37" /> +<hkern u1="Ú" u2="‚" k="37" /> +<hkern u1="Ú" u2="ÿ" k="12" /> +<hkern u1="Ú" u2="þ" k="27" /> +<hkern u1="Ú" u2="ý" k="12" /> +<hkern u1="Ú" u2="ü" k="37" /> +<hkern u1="Ú" u2="û" k="37" /> +<hkern u1="Ú" u2="ú" k="37" /> +<hkern u1="Ú" u2="ù" k="37" /> +<hkern u1="Ú" u2="ø" k="31" /> +<hkern u1="Ú" u2="ö" k="31" /> +<hkern u1="Ú" u2="õ" k="31" /> +<hkern u1="Ú" u2="ô" k="31" /> +<hkern u1="Ú" u2="ó" k="31" /> +<hkern u1="Ú" u2="ò" k="31" /> +<hkern u1="Ú" u2="ñ" k="37" /> +<hkern u1="Ú" u2="ð" k="31" /> +<hkern u1="Ú" u2="ï" k="31" /> +<hkern u1="Ú" u2="î" k="31" /> +<hkern u1="Ú" u2="í" k="31" /> +<hkern u1="Ú" u2="ì" k="31" /> +<hkern u1="Ú" u2="ë" k="31" /> +<hkern u1="Ú" u2="ê" k="31" /> +<hkern u1="Ú" u2="é" k="31" /> +<hkern u1="Ú" u2="è" k="31" /> +<hkern u1="Ú" u2="ç" k="31" /> +<hkern u1="Ú" u2="æ" k="35" /> +<hkern u1="Ú" u2="å" k="35" /> +<hkern u1="Ú" u2="ä" k="35" /> +<hkern u1="Ú" u2="ã" k="35" /> +<hkern u1="Ú" u2="â" k="35" /> +<hkern u1="Ú" u2="á" k="35" /> +<hkern u1="Ú" u2="à" k="35" /> +<hkern u1="Ú" u2="ß" k="16" /> +<hkern u1="Ú" u2="Æ" k="20" /> +<hkern u1="Ú" u2="Å" k="41" /> +<hkern u1="Ú" u2="Ä" k="41" /> +<hkern u1="Ú" u2="Ã" k="41" /> +<hkern u1="Ú" u2="Â" k="41" /> +<hkern u1="Ú" u2="Á" k="41" /> +<hkern u1="Ú" u2="À" k="41" /> +<hkern u1="Ú" u2="y" k="12" /> +<hkern u1="Ú" u2="x" k="20" /> +<hkern u1="Ú" u2="v" k="16" /> +<hkern u1="Ú" u2="u" k="37" /> +<hkern u1="Ú" u2="t" k="20" /> +<hkern u1="Ú" u2="s" k="33" /> +<hkern u1="Ú" u2="r" k="37" /> +<hkern u1="Ú" u2="q" k="31" /> +<hkern u1="Ú" u2="p" k="37" /> +<hkern u1="Ú" u2="o" k="31" /> +<hkern u1="Ú" u2="n" k="37" /> +<hkern u1="Ú" u2="m" k="37" /> +<hkern u1="Ú" u2="k" k="27" /> +<hkern u1="Ú" u2="j" k="31" /> +<hkern u1="Ú" u2="i" k="31" /> +<hkern u1="Ú" u2="h" k="27" /> +<hkern u1="Ú" u2="g" k="31" /> +<hkern u1="Ú" u2="f" k="16" /> +<hkern u1="Ú" u2="e" k="31" /> +<hkern u1="Ú" u2="d" k="31" /> +<hkern u1="Ú" u2="c" k="31" /> +<hkern u1="Ú" u2="b" k="27" /> +<hkern u1="Ú" u2="a" k="35" /> +<hkern u1="Ú" u2="A" k="41" /> +<hkern u1="Ú" u2="/" k="29" /> +<hkern u1="Ú" u2="." k="37" /> +<hkern u1="Ú" u2="," k="37" /> +<hkern u1="Ú" u2=")" k="23" /> +<hkern u1="Û" u2="ffl" k="16" /> +<hkern u1="Û" u2="ffi" k="16" /> +<hkern u1="Û" u2="fl" k="16" /> +<hkern u1="Û" u2="fi" k="16" /> +<hkern u1="Û" u2="…" k="37" /> +<hkern u1="Û" u2="„" k="37" /> +<hkern u1="Û" u2="‚" k="37" /> +<hkern u1="Û" u2="ÿ" k="12" /> +<hkern u1="Û" u2="þ" k="27" /> +<hkern u1="Û" u2="ý" k="12" /> +<hkern u1="Û" u2="ü" k="37" /> +<hkern u1="Û" u2="û" k="37" /> +<hkern u1="Û" u2="ú" k="37" /> +<hkern u1="Û" u2="ù" k="37" /> +<hkern u1="Û" u2="ø" k="31" /> +<hkern u1="Û" u2="ö" k="31" /> +<hkern u1="Û" u2="õ" k="31" /> +<hkern u1="Û" u2="ô" k="31" /> +<hkern u1="Û" u2="ó" k="31" /> +<hkern u1="Û" u2="ò" k="31" /> +<hkern u1="Û" u2="ñ" k="37" /> +<hkern u1="Û" u2="ð" k="31" /> +<hkern u1="Û" u2="ï" k="31" /> +<hkern u1="Û" u2="î" k="31" /> +<hkern u1="Û" u2="í" k="31" /> +<hkern u1="Û" u2="ì" k="31" /> +<hkern u1="Û" u2="ë" k="31" /> +<hkern u1="Û" u2="ê" k="31" /> +<hkern u1="Û" u2="é" k="31" /> +<hkern u1="Û" u2="è" k="31" /> +<hkern u1="Û" u2="ç" k="31" /> +<hkern u1="Û" u2="æ" k="35" /> +<hkern u1="Û" u2="å" k="35" /> +<hkern u1="Û" u2="ä" k="35" /> +<hkern u1="Û" u2="ã" k="35" /> +<hkern u1="Û" u2="â" k="35" /> +<hkern u1="Û" u2="á" k="35" /> +<hkern u1="Û" u2="à" k="35" /> +<hkern u1="Û" u2="ß" k="16" /> +<hkern u1="Û" u2="Æ" k="20" /> +<hkern u1="Û" u2="Å" k="41" /> +<hkern u1="Û" u2="Ä" k="41" /> +<hkern u1="Û" u2="Ã" k="41" /> +<hkern u1="Û" u2="Â" k="41" /> +<hkern u1="Û" u2="Á" k="41" /> +<hkern u1="Û" u2="À" k="41" /> +<hkern u1="Û" u2="y" k="12" /> +<hkern u1="Û" u2="x" k="20" /> +<hkern u1="Û" u2="v" k="16" /> +<hkern u1="Û" u2="u" k="37" /> +<hkern u1="Û" u2="t" k="20" /> +<hkern u1="Û" u2="s" k="33" /> +<hkern u1="Û" u2="r" k="37" /> +<hkern u1="Û" u2="q" k="31" /> +<hkern u1="Û" u2="p" k="37" /> +<hkern u1="Û" u2="o" k="31" /> +<hkern u1="Û" u2="n" k="37" /> +<hkern u1="Û" u2="m" k="37" /> +<hkern u1="Û" u2="k" k="27" /> +<hkern u1="Û" u2="j" k="31" /> +<hkern u1="Û" u2="i" k="31" /> +<hkern u1="Û" u2="h" k="27" /> +<hkern u1="Û" u2="g" k="31" /> +<hkern u1="Û" u2="f" k="16" /> +<hkern u1="Û" u2="e" k="31" /> +<hkern u1="Û" u2="d" k="31" /> +<hkern u1="Û" u2="c" k="31" /> +<hkern u1="Û" u2="b" k="27" /> +<hkern u1="Û" u2="a" k="35" /> +<hkern u1="Û" u2="A" k="41" /> +<hkern u1="Û" u2="/" k="29" /> +<hkern u1="Û" u2="." k="37" /> +<hkern u1="Û" u2="," k="37" /> +<hkern u1="Û" u2=")" k="23" /> +<hkern u1="Ü" u2="ffl" k="16" /> +<hkern u1="Ü" u2="ffi" k="16" /> +<hkern u1="Ü" u2="fl" k="16" /> +<hkern u1="Ü" u2="fi" k="16" /> +<hkern u1="Ü" u2="…" k="37" /> +<hkern u1="Ü" u2="„" k="37" /> +<hkern u1="Ü" u2="‚" k="37" /> +<hkern u1="Ü" u2="ÿ" k="12" /> +<hkern u1="Ü" u2="þ" k="27" /> +<hkern u1="Ü" u2="ý" k="12" /> +<hkern u1="Ü" u2="ü" k="37" /> +<hkern u1="Ü" u2="û" k="37" /> +<hkern u1="Ü" u2="ú" k="37" /> +<hkern u1="Ü" u2="ù" k="37" /> +<hkern u1="Ü" u2="ø" k="31" /> +<hkern u1="Ü" u2="ö" k="31" /> +<hkern u1="Ü" u2="õ" k="31" /> +<hkern u1="Ü" u2="ô" k="31" /> +<hkern u1="Ü" u2="ó" k="31" /> +<hkern u1="Ü" u2="ò" k="31" /> +<hkern u1="Ü" u2="ñ" k="37" /> +<hkern u1="Ü" u2="ð" k="31" /> +<hkern u1="Ü" u2="ï" k="31" /> +<hkern u1="Ü" u2="î" k="31" /> +<hkern u1="Ü" u2="í" k="31" /> +<hkern u1="Ü" u2="ì" k="31" /> +<hkern u1="Ü" u2="ë" k="31" /> +<hkern u1="Ü" u2="ê" k="31" /> +<hkern u1="Ü" u2="é" k="31" /> +<hkern u1="Ü" u2="è" k="31" /> +<hkern u1="Ü" u2="ç" k="31" /> +<hkern u1="Ü" u2="æ" k="35" /> +<hkern u1="Ü" u2="å" k="35" /> +<hkern u1="Ü" u2="ä" k="35" /> +<hkern u1="Ü" u2="ã" k="35" /> +<hkern u1="Ü" u2="â" k="35" /> +<hkern u1="Ü" u2="á" k="35" /> +<hkern u1="Ü" u2="à" k="35" /> +<hkern u1="Ü" u2="ß" k="16" /> +<hkern u1="Ü" u2="Æ" k="20" /> +<hkern u1="Ü" u2="Å" k="41" /> +<hkern u1="Ü" u2="Ä" k="41" /> +<hkern u1="Ü" u2="Ã" k="41" /> +<hkern u1="Ü" u2="Â" k="41" /> +<hkern u1="Ü" u2="Á" k="41" /> +<hkern u1="Ü" u2="À" k="41" /> +<hkern u1="Ü" u2="y" k="12" /> +<hkern u1="Ü" u2="x" k="20" /> +<hkern u1="Ü" u2="v" k="16" /> +<hkern u1="Ü" u2="u" k="37" /> +<hkern u1="Ü" u2="t" k="20" /> +<hkern u1="Ü" u2="s" k="33" /> +<hkern u1="Ü" u2="r" k="37" /> +<hkern u1="Ü" u2="q" k="31" /> +<hkern u1="Ü" u2="p" k="37" /> +<hkern u1="Ü" u2="o" k="31" /> +<hkern u1="Ü" u2="n" k="37" /> +<hkern u1="Ü" u2="m" k="37" /> +<hkern u1="Ü" u2="k" k="27" /> +<hkern u1="Ü" u2="j" k="31" /> +<hkern u1="Ü" u2="i" k="31" /> +<hkern u1="Ü" u2="h" k="27" /> +<hkern u1="Ü" u2="g" k="31" /> +<hkern u1="Ü" u2="f" k="16" /> +<hkern u1="Ü" u2="e" k="31" /> +<hkern u1="Ü" u2="d" k="31" /> +<hkern u1="Ü" u2="c" k="31" /> +<hkern u1="Ü" u2="b" k="27" /> +<hkern u1="Ü" u2="a" k="35" /> +<hkern u1="Ü" u2="A" k="41" /> +<hkern u1="Ü" u2="/" k="29" /> +<hkern u1="Ü" u2="." k="37" /> +<hkern u1="Ü" u2="," k="37" /> +<hkern u1="Ü" u2=")" k="23" /> +<hkern u1="Ý" u2="ffl" k="49" /> +<hkern u1="Ý" u2="ffi" k="49" /> +<hkern u1="Ý" u2="fl" k="49" /> +<hkern u1="Ý" u2="fi" k="49" /> +<hkern u1="Ý" u2="™" k="-53" /> +<hkern u1="Ý" u2="›" k="66" /> +<hkern u1="Ý" u2="‹" k="121" /> +<hkern u1="Ý" u2="…" k="154" /> +<hkern u1="Ý" u2="„" k="154" /> +<hkern u1="Ý" u2="‚" k="154" /> +<hkern u1="Ý" u2="—" k="135" /> +<hkern u1="Ý" u2="–" k="135" /> +<hkern u1="Ý" u2="ÿ" k="70" /> +<hkern u1="Ý" u2="þ" k="16" /> +<hkern u1="Ý" u2="ý" k="70" /> +<hkern u1="Ý" u2="ü" k="139" /> +<hkern u1="Ý" u2="û" k="139" /> +<hkern u1="Ý" u2="ú" k="139" /> +<hkern u1="Ý" u2="ù" k="139" /> +<hkern u1="Ý" u2="ø" k="178" /> +<hkern u1="Ý" u2="ö" k="178" /> +<hkern u1="Ý" u2="õ" k="178" /> +<hkern u1="Ý" u2="ô" k="178" /> +<hkern u1="Ý" u2="ó" k="178" /> +<hkern u1="Ý" u2="ò" k="178" /> +<hkern u1="Ý" u2="ñ" k="143" /> +<hkern u1="Ý" u2="ð" k="178" /> +<hkern u1="Ý" u2="ï" k="-47" /> +<hkern u1="Ý" u2="î" k="18" /> +<hkern u1="Ý" u2="í" k="18" /> +<hkern u1="Ý" u2="ì" k="-29" /> +<hkern u1="Ý" u2="ë" k="178" /> +<hkern u1="Ý" u2="ê" k="178" /> +<hkern u1="Ý" u2="é" k="178" /> +<hkern u1="Ý" u2="è" k="178" /> +<hkern u1="Ý" u2="ç" k="178" /> +<hkern u1="Ý" u2="æ" k="166" /> +<hkern u1="Ý" u2="å" k="166" /> +<hkern u1="Ý" u2="ä" k="166" /> +<hkern u1="Ý" u2="ã" k="166" /> +<hkern u1="Ý" u2="â" k="166" /> +<hkern u1="Ý" u2="á" k="166" /> +<hkern u1="Ý" u2="à" k="166" /> +<hkern u1="Ý" u2="ß" k="49" /> +<hkern u1="Ý" u2="Þ" k="10" /> +<hkern u1="Ý" u2="Ý" k="-102" /> +<hkern u1="Ý" u2="Ø" k="61" /> +<hkern u1="Ý" u2="Ö" k="61" /> +<hkern u1="Ý" u2="Õ" k="61" /> +<hkern u1="Ý" u2="Ô" k="61" /> +<hkern u1="Ý" u2="Ó" k="61" /> +<hkern u1="Ý" u2="Ò" k="61" /> +<hkern u1="Ý" u2="Ñ" k="10" /> +<hkern u1="Ý" u2="Ð" k="10" /> +<hkern u1="Ý" u2="Ï" k="10" /> +<hkern u1="Ý" u2="Î" k="10" /> +<hkern u1="Ý" u2="Í" k="10" /> +<hkern u1="Ý" u2="Ì" k="10" /> +<hkern u1="Ý" u2="Ë" k="10" /> +<hkern u1="Ý" u2="Ê" k="10" /> +<hkern u1="Ý" u2="É" k="10" /> +<hkern u1="Ý" u2="È" k="10" /> +<hkern u1="Ý" u2="Ç" k="61" /> +<hkern u1="Ý" u2="Æ" k="147" /> +<hkern u1="Ý" u2="Å" k="131" /> +<hkern u1="Ý" u2="Ä" k="131" /> +<hkern u1="Ý" u2="Ã" k="131" /> +<hkern u1="Ý" u2="Â" k="131" /> +<hkern u1="Ý" u2="Á" k="131" /> +<hkern u1="Ý" u2="À" k="131" /> +<hkern u1="Ý" u2="»" k="66" /> +<hkern u1="Ý" u2="®" k="47" /> +<hkern u1="Ý" u2="«" k="121" /> +<hkern u1="Ý" u2="}" k="-25" /> +<hkern u1="Ý" u2="y" k="70" /> +<hkern u1="Ý" u2="x" k="88" /> +<hkern u1="Ý" u2="v" k="72" /> +<hkern u1="Ý" u2="u" k="139" /> +<hkern u1="Ý" u2="t" k="113" /> +<hkern u1="Ý" u2="s" k="174" /> +<hkern u1="Ý" u2="r" k="143" /> +<hkern u1="Ý" u2="q" k="178" /> +<hkern u1="Ý" u2="p" k="143" /> +<hkern u1="Ý" u2="o" k="178" /> +<hkern u1="Ý" u2="n" k="143" /> +<hkern u1="Ý" u2="m" k="143" /> +<hkern u1="Ý" u2="k" k="16" /> +<hkern u1="Ý" u2="j" k="18" /> +<hkern u1="Ý" u2="i" k="18" /> +<hkern u1="Ý" u2="h" k="16" /> +<hkern u1="Ý" u2="g" k="178" /> +<hkern u1="Ý" u2="f" k="49" /> +<hkern u1="Ý" u2="e" k="178" /> +<hkern u1="Ý" u2="d" k="178" /> +<hkern u1="Ý" u2="c" k="178" /> +<hkern u1="Ý" u2="b" k="16" /> +<hkern u1="Ý" u2="a" k="166" /> +<hkern u1="Ý" u2="]" k="-20" /> +<hkern u1="Ý" u2="Y" k="-102" /> +<hkern u1="Ý" u2="X" k="-92" /> +<hkern u1="Ý" u2="V" k="-92" /> +<hkern u1="Ý" u2="T" k="-86" /> +<hkern u1="Ý" u2="S" k="18" /> +<hkern u1="Ý" u2="R" k="10" /> +<hkern u1="Ý" u2="Q" k="61" /> +<hkern u1="Ý" u2="P" k="10" /> +<hkern u1="Ý" u2="O" k="61" /> +<hkern u1="Ý" u2="N" k="10" /> +<hkern u1="Ý" u2="M" k="10" /> +<hkern u1="Ý" u2="L" k="10" /> +<hkern u1="Ý" u2="K" k="10" /> +<hkern u1="Ý" u2="I" k="10" /> +<hkern u1="Ý" u2="H" k="10" /> +<hkern u1="Ý" u2="G" k="61" /> +<hkern u1="Ý" u2="F" k="10" /> +<hkern u1="Ý" u2="E" k="10" /> +<hkern u1="Ý" u2="D" k="10" /> +<hkern u1="Ý" u2="C" k="61" /> +<hkern u1="Ý" u2="B" k="10" /> +<hkern u1="Ý" u2="A" k="131" /> +<hkern u1="Ý" u2="@" k="72" /> +<hkern u1="Ý" u2=";" k="53" /> +<hkern u1="Ý" u2=":" k="53" /> +<hkern u1="Ý" u2="/" k="90" /> +<hkern u1="Ý" u2="." k="154" /> +<hkern u1="Ý" u2="-" k="135" /> +<hkern u1="Ý" u2="," k="154" /> +<hkern u1="Ý" u2="&" k="53" /> +<hkern u1="Þ" u2="…" k="72" /> +<hkern u1="Þ" u2="„" k="72" /> +<hkern u1="Þ" u2="‚" k="72" /> +<hkern u1="Þ" u2="þ" k="10" /> +<hkern u1="Þ" u2="ñ" k="10" /> +<hkern u1="Þ" u2="ï" k="10" /> +<hkern u1="Þ" u2="î" k="10" /> +<hkern u1="Þ" u2="í" k="10" /> +<hkern u1="Þ" u2="ì" k="10" /> +<hkern u1="Þ" u2="æ" k="16" /> +<hkern u1="Þ" u2="å" k="16" /> +<hkern u1="Þ" u2="ä" k="16" /> +<hkern u1="Þ" u2="ã" k="16" /> +<hkern u1="Þ" u2="â" k="16" /> +<hkern u1="Þ" u2="á" k="16" /> +<hkern u1="Þ" u2="à" k="16" /> +<hkern u1="Þ" u2="Ý" k="70" /> +<hkern u1="Þ" u2="Æ" k="121" /> +<hkern u1="Þ" u2="Å" k="35" /> +<hkern u1="Þ" u2="Ä" k="35" /> +<hkern u1="Þ" u2="Ã" k="35" /> +<hkern u1="Þ" u2="Â" k="35" /> +<hkern u1="Þ" u2="Á" k="35" /> +<hkern u1="Þ" u2="À" k="35" /> +<hkern u1="Þ" u2="}" k="31" /> +<hkern u1="Þ" u2="x" k="20" /> +<hkern u1="Þ" u2="r" k="10" /> +<hkern u1="Þ" u2="p" k="10" /> +<hkern u1="Þ" u2="n" k="10" /> +<hkern u1="Þ" u2="m" k="10" /> +<hkern u1="Þ" u2="k" k="10" /> +<hkern u1="Þ" u2="j" k="10" /> +<hkern u1="Þ" u2="i" k="10" /> +<hkern u1="Þ" u2="h" k="10" /> +<hkern u1="Þ" u2="b" k="10" /> +<hkern u1="Þ" u2="a" k="16" /> +<hkern u1="Þ" u2="]" k="35" /> +<hkern u1="Þ" u2="Y" k="70" /> +<hkern u1="Þ" u2="X" k="90" /> +<hkern u1="Þ" u2="V" k="23" /> +<hkern u1="Þ" u2="T" k="92" /> +<hkern u1="Þ" u2="A" k="35" /> +<hkern u1="Þ" u2="/" k="20" /> +<hkern u1="Þ" u2="." k="72" /> +<hkern u1="Þ" u2="," k="72" /> +<hkern u1="Þ" u2=")" k="41" /> +<hkern u1="ß" u2="™" k="18" /> +<hkern u1="ß" u2="}" k="27" /> +<hkern u1="ß" u2="x" k="12" /> +<hkern u1="ß" u2="v" k="12" /> +<hkern u1="ß" u2="t" k="8" /> +<hkern u1="ß" u2="]" k="27" /> +<hkern u1="ß" u2=")" k="35" /> +<hkern u1="à" u2="ffl" k="12" /> +<hkern u1="à" u2="ffi" k="12" /> +<hkern u1="à" u2="fl" k="12" /> +<hkern u1="à" u2="fi" k="12" /> +<hkern u1="à" u2="™" k="51" /> +<hkern u1="à" u2="”" k="29" /> +<hkern u1="à" u2="“" k="27" /> +<hkern u1="à" u2="’" k="29" /> +<hkern u1="à" u2="‘" k="27" /> +<hkern u1="à" u2="ÿ" k="14" /> +<hkern u1="à" u2="ý" k="14" /> +<hkern u1="à" u2="ü" k="8" /> +<hkern u1="à" u2="û" k="8" /> +<hkern u1="à" u2="ú" k="8" /> +<hkern u1="à" u2="ù" k="8" /> +<hkern u1="à" u2="ß" k="12" /> +<hkern u1="à" u2="Þ" k="29" /> +<hkern u1="à" u2="Ý" k="176" /> +<hkern u1="à" u2="Ü" k="45" /> +<hkern u1="à" u2="Û" k="45" /> +<hkern u1="à" u2="Ú" k="45" /> +<hkern u1="à" u2="Ù" k="45" /> +<hkern u1="à" u2="Ø" k="20" /> +<hkern u1="à" u2="Ö" k="20" /> +<hkern u1="à" u2="Õ" k="20" /> +<hkern u1="à" u2="Ô" k="20" /> +<hkern u1="à" u2="Ó" k="20" /> +<hkern u1="à" u2="Ò" k="20" /> +<hkern u1="à" u2="Ñ" k="29" /> +<hkern u1="à" u2="Ð" k="29" /> +<hkern u1="à" u2="Ï" k="29" /> +<hkern u1="à" u2="Î" k="29" /> +<hkern u1="à" u2="Í" k="29" /> +<hkern u1="à" u2="Ì" k="29" /> +<hkern u1="à" u2="Ë" k="29" /> +<hkern u1="à" u2="Ê" k="29" /> +<hkern u1="à" u2="É" k="29" /> +<hkern u1="à" u2="È" k="29" /> +<hkern u1="à" u2="Ç" k="20" /> +<hkern u1="à" u2="Å" k="10" /> +<hkern u1="à" u2="Ä" k="10" /> +<hkern u1="à" u2="Ã" k="10" /> +<hkern u1="à" u2="Â" k="10" /> +<hkern u1="à" u2="Á" k="10" /> +<hkern u1="à" u2="À" k="10" /> +<hkern u1="à" u2="}" k="41" /> +<hkern u1="à" u2="y" k="14" /> +<hkern u1="à" u2="v" k="20" /> +<hkern u1="à" u2="u" k="8" /> +<hkern u1="à" u2="t" k="10" /> +<hkern u1="à" u2="f" k="12" /> +<hkern u1="à" u2="]" k="47" /> +<hkern u1="à" u2="\" k="47" /> +<hkern u1="à" u2="Y" k="176" /> +<hkern u1="à" u2="X" k="12" /> +<hkern u1="à" u2="V" k="109" /> +<hkern u1="à" u2="U" k="45" /> +<hkern u1="à" u2="T" k="186" /> +<hkern u1="à" u2="S" k="25" /> +<hkern u1="à" u2="R" k="29" /> +<hkern u1="à" u2="Q" k="20" /> +<hkern u1="à" u2="P" k="29" /> +<hkern u1="à" u2="O" k="20" /> +<hkern u1="à" u2="N" k="29" /> +<hkern u1="à" u2="M" k="29" /> +<hkern u1="à" u2="L" k="29" /> +<hkern u1="à" u2="K" k="29" /> +<hkern u1="à" u2="I" k="29" /> +<hkern u1="à" u2="H" k="29" /> +<hkern u1="à" u2="G" k="20" /> +<hkern u1="à" u2="F" k="29" /> +<hkern u1="à" u2="E" k="29" /> +<hkern u1="à" u2="D" k="29" /> +<hkern u1="à" u2="C" k="20" /> +<hkern u1="à" u2="B" k="29" /> +<hkern u1="à" u2="A" k="10" /> +<hkern u1="à" u2="?" k="39" /> +<hkern u1="à" u2="*" k="29" /> +<hkern u1="à" u2=")" k="41" /> +<hkern u1="à" u2="'" k="29" /> +<hkern u1="à" u2="&" k="12" /> +<hkern u1="à" u2=""" k="29" /> +<hkern u1="á" u2="ffl" k="12" /> +<hkern u1="á" u2="ffi" k="12" /> +<hkern u1="á" u2="fl" k="12" /> +<hkern u1="á" u2="fi" k="12" /> +<hkern u1="á" u2="™" k="51" /> +<hkern u1="á" u2="”" k="29" /> +<hkern u1="á" u2="“" k="27" /> +<hkern u1="á" u2="’" k="29" /> +<hkern u1="á" u2="‘" k="27" /> +<hkern u1="á" u2="ÿ" k="14" /> +<hkern u1="á" u2="ý" k="14" /> +<hkern u1="á" u2="ü" k="8" /> +<hkern u1="á" u2="û" k="8" /> +<hkern u1="á" u2="ú" k="8" /> +<hkern u1="á" u2="ù" k="8" /> +<hkern u1="á" u2="ß" k="12" /> +<hkern u1="á" u2="Þ" k="29" /> +<hkern u1="á" u2="Ý" k="176" /> +<hkern u1="á" u2="Ü" k="45" /> +<hkern u1="á" u2="Û" k="45" /> +<hkern u1="á" u2="Ú" k="45" /> +<hkern u1="á" u2="Ù" k="45" /> +<hkern u1="á" u2="Ø" k="20" /> +<hkern u1="á" u2="Ö" k="20" /> +<hkern u1="á" u2="Õ" k="20" /> +<hkern u1="á" u2="Ô" k="20" /> +<hkern u1="á" u2="Ó" k="20" /> +<hkern u1="á" u2="Ò" k="20" /> +<hkern u1="á" u2="Ñ" k="29" /> +<hkern u1="á" u2="Ð" k="29" /> +<hkern u1="á" u2="Ï" k="29" /> +<hkern u1="á" u2="Î" k="29" /> +<hkern u1="á" u2="Í" k="29" /> +<hkern u1="á" u2="Ì" k="29" /> +<hkern u1="á" u2="Ë" k="29" /> +<hkern u1="á" u2="Ê" k="29" /> +<hkern u1="á" u2="É" k="29" /> +<hkern u1="á" u2="È" k="29" /> +<hkern u1="á" u2="Ç" k="20" /> +<hkern u1="á" u2="Å" k="10" /> +<hkern u1="á" u2="Ä" k="10" /> +<hkern u1="á" u2="Ã" k="10" /> +<hkern u1="á" u2="Â" k="10" /> +<hkern u1="á" u2="Á" k="10" /> +<hkern u1="á" u2="À" k="10" /> +<hkern u1="á" u2="}" k="41" /> +<hkern u1="á" u2="y" k="14" /> +<hkern u1="á" u2="v" k="20" /> +<hkern u1="á" u2="u" k="8" /> +<hkern u1="á" u2="t" k="10" /> +<hkern u1="á" u2="f" k="12" /> +<hkern u1="á" u2="]" k="47" /> +<hkern u1="á" u2="\" k="47" /> +<hkern u1="á" u2="Y" k="176" /> +<hkern u1="á" u2="X" k="12" /> +<hkern u1="á" u2="V" k="109" /> +<hkern u1="á" u2="U" k="45" /> +<hkern u1="á" u2="T" k="186" /> +<hkern u1="á" u2="S" k="25" /> +<hkern u1="á" u2="R" k="29" /> +<hkern u1="á" u2="Q" k="20" /> +<hkern u1="á" u2="P" k="29" /> +<hkern u1="á" u2="O" k="20" /> +<hkern u1="á" u2="N" k="29" /> +<hkern u1="á" u2="M" k="29" /> +<hkern u1="á" u2="L" k="29" /> +<hkern u1="á" u2="K" k="29" /> +<hkern u1="á" u2="I" k="29" /> +<hkern u1="á" u2="H" k="29" /> +<hkern u1="á" u2="G" k="20" /> +<hkern u1="á" u2="F" k="29" /> +<hkern u1="á" u2="E" k="29" /> +<hkern u1="á" u2="D" k="29" /> +<hkern u1="á" u2="C" k="20" /> +<hkern u1="á" u2="B" k="29" /> +<hkern u1="á" u2="A" k="10" /> +<hkern u1="á" u2="?" k="39" /> +<hkern u1="á" u2="*" k="29" /> +<hkern u1="á" u2=")" k="41" /> +<hkern u1="á" u2="'" k="29" /> +<hkern u1="á" u2="&" k="12" /> +<hkern u1="á" u2=""" k="29" /> +<hkern u1="â" u2="ffl" k="12" /> +<hkern u1="â" u2="ffi" k="12" /> +<hkern u1="â" u2="fl" k="12" /> +<hkern u1="â" u2="fi" k="12" /> +<hkern u1="â" u2="™" k="51" /> +<hkern u1="â" u2="”" k="29" /> +<hkern u1="â" u2="“" k="27" /> +<hkern u1="â" u2="’" k="29" /> +<hkern u1="â" u2="‘" k="27" /> +<hkern u1="â" u2="ÿ" k="14" /> +<hkern u1="â" u2="ý" k="14" /> +<hkern u1="â" u2="ü" k="8" /> +<hkern u1="â" u2="û" k="8" /> +<hkern u1="â" u2="ú" k="8" /> +<hkern u1="â" u2="ù" k="8" /> +<hkern u1="â" u2="ß" k="12" /> +<hkern u1="â" u2="Þ" k="29" /> +<hkern u1="â" u2="Ý" k="176" /> +<hkern u1="â" u2="Ü" k="45" /> +<hkern u1="â" u2="Û" k="45" /> +<hkern u1="â" u2="Ú" k="45" /> +<hkern u1="â" u2="Ù" k="45" /> +<hkern u1="â" u2="Ø" k="20" /> +<hkern u1="â" u2="Ö" k="20" /> +<hkern u1="â" u2="Õ" k="20" /> +<hkern u1="â" u2="Ô" k="20" /> +<hkern u1="â" u2="Ó" k="20" /> +<hkern u1="â" u2="Ò" k="20" /> +<hkern u1="â" u2="Ñ" k="29" /> +<hkern u1="â" u2="Ð" k="29" /> +<hkern u1="â" u2="Ï" k="29" /> +<hkern u1="â" u2="Î" k="29" /> +<hkern u1="â" u2="Í" k="29" /> +<hkern u1="â" u2="Ì" k="29" /> +<hkern u1="â" u2="Ë" k="29" /> +<hkern u1="â" u2="Ê" k="29" /> +<hkern u1="â" u2="É" k="29" /> +<hkern u1="â" u2="È" k="29" /> +<hkern u1="â" u2="Ç" k="20" /> +<hkern u1="â" u2="Å" k="10" /> +<hkern u1="â" u2="Ä" k="10" /> +<hkern u1="â" u2="Ã" k="10" /> +<hkern u1="â" u2="Â" k="10" /> +<hkern u1="â" u2="Á" k="10" /> +<hkern u1="â" u2="À" k="10" /> +<hkern u1="â" u2="}" k="41" /> +<hkern u1="â" u2="y" k="14" /> +<hkern u1="â" u2="v" k="20" /> +<hkern u1="â" u2="u" k="8" /> +<hkern u1="â" u2="t" k="10" /> +<hkern u1="â" u2="f" k="12" /> +<hkern u1="â" u2="]" k="47" /> +<hkern u1="â" u2="\" k="47" /> +<hkern u1="â" u2="Y" k="176" /> +<hkern u1="â" u2="X" k="12" /> +<hkern u1="â" u2="V" k="109" /> +<hkern u1="â" u2="U" k="45" /> +<hkern u1="â" u2="T" k="186" /> +<hkern u1="â" u2="S" k="25" /> +<hkern u1="â" u2="R" k="29" /> +<hkern u1="â" u2="Q" k="20" /> +<hkern u1="â" u2="P" k="29" /> +<hkern u1="â" u2="O" k="20" /> +<hkern u1="â" u2="N" k="29" /> +<hkern u1="â" u2="M" k="29" /> +<hkern u1="â" u2="L" k="29" /> +<hkern u1="â" u2="K" k="29" /> +<hkern u1="â" u2="I" k="29" /> +<hkern u1="â" u2="H" k="29" /> +<hkern u1="â" u2="G" k="20" /> +<hkern u1="â" u2="F" k="29" /> +<hkern u1="â" u2="E" k="29" /> +<hkern u1="â" u2="D" k="29" /> +<hkern u1="â" u2="C" k="20" /> +<hkern u1="â" u2="B" k="29" /> +<hkern u1="â" u2="A" k="10" /> +<hkern u1="â" u2="?" k="39" /> +<hkern u1="â" u2="*" k="29" /> +<hkern u1="â" u2=")" k="41" /> +<hkern u1="â" u2="'" k="29" /> +<hkern u1="â" u2="&" k="12" /> +<hkern u1="â" u2=""" k="29" /> +<hkern u1="ã" u2="ffl" k="12" /> +<hkern u1="ã" u2="ffi" k="12" /> +<hkern u1="ã" u2="fl" k="12" /> +<hkern u1="ã" u2="fi" k="12" /> +<hkern u1="ã" u2="™" k="51" /> +<hkern u1="ã" u2="”" k="29" /> +<hkern u1="ã" u2="“" k="27" /> +<hkern u1="ã" u2="’" k="29" /> +<hkern u1="ã" u2="‘" k="27" /> +<hkern u1="ã" u2="ÿ" k="14" /> +<hkern u1="ã" u2="ý" k="14" /> +<hkern u1="ã" u2="ü" k="8" /> +<hkern u1="ã" u2="û" k="8" /> +<hkern u1="ã" u2="ú" k="8" /> +<hkern u1="ã" u2="ù" k="8" /> +<hkern u1="ã" u2="ß" k="12" /> +<hkern u1="ã" u2="Þ" k="29" /> +<hkern u1="ã" u2="Ý" k="176" /> +<hkern u1="ã" u2="Ü" k="45" /> +<hkern u1="ã" u2="Û" k="45" /> +<hkern u1="ã" u2="Ú" k="45" /> +<hkern u1="ã" u2="Ù" k="45" /> +<hkern u1="ã" u2="Ø" k="20" /> +<hkern u1="ã" u2="Ö" k="20" /> +<hkern u1="ã" u2="Õ" k="20" /> +<hkern u1="ã" u2="Ô" k="20" /> +<hkern u1="ã" u2="Ó" k="20" /> +<hkern u1="ã" u2="Ò" k="20" /> +<hkern u1="ã" u2="Ñ" k="29" /> +<hkern u1="ã" u2="Ð" k="29" /> +<hkern u1="ã" u2="Ï" k="29" /> +<hkern u1="ã" u2="Î" k="29" /> +<hkern u1="ã" u2="Í" k="29" /> +<hkern u1="ã" u2="Ì" k="29" /> +<hkern u1="ã" u2="Ë" k="29" /> +<hkern u1="ã" u2="Ê" k="29" /> +<hkern u1="ã" u2="É" k="29" /> +<hkern u1="ã" u2="È" k="29" /> +<hkern u1="ã" u2="Ç" k="20" /> +<hkern u1="ã" u2="Å" k="10" /> +<hkern u1="ã" u2="Ä" k="10" /> +<hkern u1="ã" u2="Ã" k="10" /> +<hkern u1="ã" u2="Â" k="10" /> +<hkern u1="ã" u2="Á" k="10" /> +<hkern u1="ã" u2="À" k="10" /> +<hkern u1="ã" u2="}" k="41" /> +<hkern u1="ã" u2="y" k="14" /> +<hkern u1="ã" u2="v" k="20" /> +<hkern u1="ã" u2="u" k="8" /> +<hkern u1="ã" u2="t" k="10" /> +<hkern u1="ã" u2="f" k="12" /> +<hkern u1="ã" u2="]" k="47" /> +<hkern u1="ã" u2="\" k="47" /> +<hkern u1="ã" u2="Y" k="176" /> +<hkern u1="ã" u2="X" k="12" /> +<hkern u1="ã" u2="V" k="109" /> +<hkern u1="ã" u2="U" k="45" /> +<hkern u1="ã" u2="T" k="186" /> +<hkern u1="ã" u2="S" k="25" /> +<hkern u1="ã" u2="R" k="29" /> +<hkern u1="ã" u2="Q" k="20" /> +<hkern u1="ã" u2="P" k="29" /> +<hkern u1="ã" u2="O" k="20" /> +<hkern u1="ã" u2="N" k="29" /> +<hkern u1="ã" u2="M" k="29" /> +<hkern u1="ã" u2="L" k="29" /> +<hkern u1="ã" u2="K" k="29" /> +<hkern u1="ã" u2="I" k="29" /> +<hkern u1="ã" u2="H" k="29" /> +<hkern u1="ã" u2="G" k="20" /> +<hkern u1="ã" u2="F" k="29" /> +<hkern u1="ã" u2="E" k="29" /> +<hkern u1="ã" u2="D" k="29" /> +<hkern u1="ã" u2="C" k="20" /> +<hkern u1="ã" u2="B" k="29" /> +<hkern u1="ã" u2="A" k="10" /> +<hkern u1="ã" u2="?" k="39" /> +<hkern u1="ã" u2="*" k="29" /> +<hkern u1="ã" u2=")" k="41" /> +<hkern u1="ã" u2="'" k="29" /> +<hkern u1="ã" u2="&" k="12" /> +<hkern u1="ã" u2=""" k="29" /> +<hkern u1="ä" u2="ffl" k="12" /> +<hkern u1="ä" u2="ffi" k="12" /> +<hkern u1="ä" u2="fl" k="12" /> +<hkern u1="ä" u2="fi" k="12" /> +<hkern u1="ä" u2="™" k="51" /> +<hkern u1="ä" u2="”" k="29" /> +<hkern u1="ä" u2="“" k="27" /> +<hkern u1="ä" u2="’" k="29" /> +<hkern u1="ä" u2="‘" k="27" /> +<hkern u1="ä" u2="ÿ" k="14" /> +<hkern u1="ä" u2="ý" k="14" /> +<hkern u1="ä" u2="ü" k="8" /> +<hkern u1="ä" u2="û" k="8" /> +<hkern u1="ä" u2="ú" k="8" /> +<hkern u1="ä" u2="ù" k="8" /> +<hkern u1="ä" u2="ß" k="12" /> +<hkern u1="ä" u2="Þ" k="29" /> +<hkern u1="ä" u2="Ý" k="176" /> +<hkern u1="ä" u2="Ü" k="45" /> +<hkern u1="ä" u2="Û" k="45" /> +<hkern u1="ä" u2="Ú" k="45" /> +<hkern u1="ä" u2="Ù" k="45" /> +<hkern u1="ä" u2="Ø" k="20" /> +<hkern u1="ä" u2="Ö" k="20" /> +<hkern u1="ä" u2="Õ" k="20" /> +<hkern u1="ä" u2="Ô" k="20" /> +<hkern u1="ä" u2="Ó" k="20" /> +<hkern u1="ä" u2="Ò" k="20" /> +<hkern u1="ä" u2="Ñ" k="29" /> +<hkern u1="ä" u2="Ð" k="29" /> +<hkern u1="ä" u2="Ï" k="29" /> +<hkern u1="ä" u2="Î" k="29" /> +<hkern u1="ä" u2="Í" k="29" /> +<hkern u1="ä" u2="Ì" k="29" /> +<hkern u1="ä" u2="Ë" k="29" /> +<hkern u1="ä" u2="Ê" k="29" /> +<hkern u1="ä" u2="É" k="29" /> +<hkern u1="ä" u2="È" k="29" /> +<hkern u1="ä" u2="Ç" k="20" /> +<hkern u1="ä" u2="Å" k="10" /> +<hkern u1="ä" u2="Ä" k="10" /> +<hkern u1="ä" u2="Ã" k="10" /> +<hkern u1="ä" u2="Â" k="10" /> +<hkern u1="ä" u2="Á" k="10" /> +<hkern u1="ä" u2="À" k="10" /> +<hkern u1="ä" u2="}" k="41" /> +<hkern u1="ä" u2="y" k="14" /> +<hkern u1="ä" u2="v" k="20" /> +<hkern u1="ä" u2="u" k="8" /> +<hkern u1="ä" u2="t" k="10" /> +<hkern u1="ä" u2="f" k="12" /> +<hkern u1="ä" u2="]" k="47" /> +<hkern u1="ä" u2="\" k="47" /> +<hkern u1="ä" u2="Y" k="176" /> +<hkern u1="ä" u2="X" k="12" /> +<hkern u1="ä" u2="V" k="109" /> +<hkern u1="ä" u2="U" k="45" /> +<hkern u1="ä" u2="T" k="186" /> +<hkern u1="ä" u2="S" k="25" /> +<hkern u1="ä" u2="R" k="29" /> +<hkern u1="ä" u2="Q" k="20" /> +<hkern u1="ä" u2="P" k="29" /> +<hkern u1="ä" u2="O" k="20" /> +<hkern u1="ä" u2="N" k="29" /> +<hkern u1="ä" u2="M" k="29" /> +<hkern u1="ä" u2="L" k="29" /> +<hkern u1="ä" u2="K" k="29" /> +<hkern u1="ä" u2="I" k="29" /> +<hkern u1="ä" u2="H" k="29" /> +<hkern u1="ä" u2="G" k="20" /> +<hkern u1="ä" u2="F" k="29" /> +<hkern u1="ä" u2="E" k="29" /> +<hkern u1="ä" u2="D" k="29" /> +<hkern u1="ä" u2="C" k="20" /> +<hkern u1="ä" u2="B" k="29" /> +<hkern u1="ä" u2="A" k="10" /> +<hkern u1="ä" u2="?" k="39" /> +<hkern u1="ä" u2="*" k="29" /> +<hkern u1="ä" u2=")" k="41" /> +<hkern u1="ä" u2="'" k="29" /> +<hkern u1="ä" u2="&" k="12" /> +<hkern u1="ä" u2=""" k="29" /> +<hkern u1="å" u2="ffl" k="12" /> +<hkern u1="å" u2="ffi" k="12" /> +<hkern u1="å" u2="fl" k="12" /> +<hkern u1="å" u2="fi" k="12" /> +<hkern u1="å" u2="™" k="51" /> +<hkern u1="å" u2="”" k="29" /> +<hkern u1="å" u2="“" k="27" /> +<hkern u1="å" u2="’" k="29" /> +<hkern u1="å" u2="‘" k="27" /> +<hkern u1="å" u2="ÿ" k="14" /> +<hkern u1="å" u2="ý" k="14" /> +<hkern u1="å" u2="ü" k="8" /> +<hkern u1="å" u2="û" k="8" /> +<hkern u1="å" u2="ú" k="8" /> +<hkern u1="å" u2="ù" k="8" /> +<hkern u1="å" u2="ß" k="12" /> +<hkern u1="å" u2="Þ" k="29" /> +<hkern u1="å" u2="Ý" k="176" /> +<hkern u1="å" u2="Ü" k="45" /> +<hkern u1="å" u2="Û" k="45" /> +<hkern u1="å" u2="Ú" k="45" /> +<hkern u1="å" u2="Ù" k="45" /> +<hkern u1="å" u2="Ø" k="20" /> +<hkern u1="å" u2="Ö" k="20" /> +<hkern u1="å" u2="Õ" k="20" /> +<hkern u1="å" u2="Ô" k="20" /> +<hkern u1="å" u2="Ó" k="20" /> +<hkern u1="å" u2="Ò" k="20" /> +<hkern u1="å" u2="Ñ" k="29" /> +<hkern u1="å" u2="Ð" k="29" /> +<hkern u1="å" u2="Ï" k="29" /> +<hkern u1="å" u2="Î" k="29" /> +<hkern u1="å" u2="Í" k="29" /> +<hkern u1="å" u2="Ì" k="29" /> +<hkern u1="å" u2="Ë" k="29" /> +<hkern u1="å" u2="Ê" k="29" /> +<hkern u1="å" u2="É" k="29" /> +<hkern u1="å" u2="È" k="29" /> +<hkern u1="å" u2="Ç" k="20" /> +<hkern u1="å" u2="Å" k="10" /> +<hkern u1="å" u2="Ä" k="10" /> +<hkern u1="å" u2="Ã" k="10" /> +<hkern u1="å" u2="Â" k="10" /> +<hkern u1="å" u2="Á" k="10" /> +<hkern u1="å" u2="À" k="10" /> +<hkern u1="å" u2="}" k="41" /> +<hkern u1="å" u2="y" k="14" /> +<hkern u1="å" u2="v" k="20" /> +<hkern u1="å" u2="u" k="8" /> +<hkern u1="å" u2="t" k="10" /> +<hkern u1="å" u2="f" k="12" /> +<hkern u1="å" u2="]" k="47" /> +<hkern u1="å" u2="\" k="47" /> +<hkern u1="å" u2="Y" k="176" /> +<hkern u1="å" u2="X" k="12" /> +<hkern u1="å" u2="V" k="109" /> +<hkern u1="å" u2="U" k="45" /> +<hkern u1="å" u2="T" k="186" /> +<hkern u1="å" u2="S" k="25" /> +<hkern u1="å" u2="R" k="29" /> +<hkern u1="å" u2="Q" k="20" /> +<hkern u1="å" u2="P" k="29" /> +<hkern u1="å" u2="O" k="20" /> +<hkern u1="å" u2="N" k="29" /> +<hkern u1="å" u2="M" k="29" /> +<hkern u1="å" u2="L" k="29" /> +<hkern u1="å" u2="K" k="29" /> +<hkern u1="å" u2="I" k="29" /> +<hkern u1="å" u2="H" k="29" /> +<hkern u1="å" u2="G" k="20" /> +<hkern u1="å" u2="F" k="29" /> +<hkern u1="å" u2="E" k="29" /> +<hkern u1="å" u2="D" k="29" /> +<hkern u1="å" u2="C" k="20" /> +<hkern u1="å" u2="B" k="29" /> +<hkern u1="å" u2="A" k="10" /> +<hkern u1="å" u2="?" k="39" /> +<hkern u1="å" u2="*" k="29" /> +<hkern u1="å" u2=")" k="41" /> +<hkern u1="å" u2="'" k="29" /> +<hkern u1="å" u2="&" k="12" /> +<hkern u1="å" u2=""" k="29" /> +<hkern u1="æ" u2="™" k="43" /> +<hkern u1="æ" u2="”" k="25" /> +<hkern u1="æ" u2="“" k="23" /> +<hkern u1="æ" u2="’" k="25" /> +<hkern u1="æ" u2="‘" k="23" /> +<hkern u1="æ" u2="Þ" k="23" /> +<hkern u1="æ" u2="Ý" k="170" /> +<hkern u1="æ" u2="Ü" k="27" /> +<hkern u1="æ" u2="Û" k="27" /> +<hkern u1="æ" u2="Ú" k="27" /> +<hkern u1="æ" u2="Ù" k="27" /> +<hkern u1="æ" u2="Ø" k="10" /> +<hkern u1="æ" u2="Ö" k="10" /> +<hkern u1="æ" u2="Õ" k="10" /> +<hkern u1="æ" u2="Ô" k="10" /> +<hkern u1="æ" u2="Ó" k="10" /> +<hkern u1="æ" u2="Ò" k="10" /> +<hkern u1="æ" u2="Ñ" k="23" /> +<hkern u1="æ" u2="Ð" k="23" /> +<hkern u1="æ" u2="Ï" k="23" /> +<hkern u1="æ" u2="Î" k="23" /> +<hkern u1="æ" u2="Í" k="23" /> +<hkern u1="æ" u2="Ì" k="23" /> +<hkern u1="æ" u2="Ë" k="23" /> +<hkern u1="æ" u2="Ê" k="23" /> +<hkern u1="æ" u2="É" k="23" /> +<hkern u1="æ" u2="È" k="23" /> +<hkern u1="æ" u2="Ç" k="10" /> +<hkern u1="æ" u2="Å" k="10" /> +<hkern u1="æ" u2="Ä" k="10" /> +<hkern u1="æ" u2="Ã" k="10" /> +<hkern u1="æ" u2="Â" k="10" /> +<hkern u1="æ" u2="Á" k="10" /> +<hkern u1="æ" u2="À" k="10" /> +<hkern u1="æ" u2="}" k="39" /> +<hkern u1="æ" u2="x" k="12" /> +<hkern u1="æ" u2="v" k="10" /> +<hkern u1="æ" u2="]" k="43" /> +<hkern u1="æ" u2="\" k="39" /> +<hkern u1="æ" u2="Y" k="170" /> +<hkern u1="æ" u2="X" k="33" /> +<hkern u1="æ" u2="V" k="111" /> +<hkern u1="æ" u2="U" k="27" /> +<hkern u1="æ" u2="T" k="166" /> +<hkern u1="æ" u2="S" k="23" /> +<hkern u1="æ" u2="R" k="23" /> +<hkern u1="æ" u2="Q" k="10" /> +<hkern u1="æ" u2="P" k="23" /> +<hkern u1="æ" u2="O" k="10" /> +<hkern u1="æ" u2="N" k="23" /> +<hkern u1="æ" u2="M" k="23" /> +<hkern u1="æ" u2="L" k="23" /> +<hkern u1="æ" u2="K" k="23" /> +<hkern u1="æ" u2="I" k="23" /> +<hkern u1="æ" u2="H" k="23" /> +<hkern u1="æ" u2="G" k="10" /> +<hkern u1="æ" u2="F" k="23" /> +<hkern u1="æ" u2="E" k="23" /> +<hkern u1="æ" u2="D" k="23" /> +<hkern u1="æ" u2="C" k="10" /> +<hkern u1="æ" u2="B" k="23" /> +<hkern u1="æ" u2="A" k="10" /> +<hkern u1="æ" u2="?" k="35" /> +<hkern u1="æ" u2="*" k="23" /> +<hkern u1="æ" u2=")" k="43" /> +<hkern u1="æ" u2="'" k="25" /> +<hkern u1="æ" u2="&" k="12" /> +<hkern u1="æ" u2=""" k="25" /> +<hkern u1="ç" u2="™" k="25" /> +<hkern u1="ç" u2="—" k="25" /> +<hkern u1="ç" u2="–" k="25" /> +<hkern u1="ç" u2="ø" k="8" /> +<hkern u1="ç" u2="ö" k="8" /> +<hkern u1="ç" u2="õ" k="8" /> +<hkern u1="ç" u2="ô" k="8" /> +<hkern u1="ç" u2="ó" k="8" /> +<hkern u1="ç" u2="ò" k="8" /> +<hkern u1="ç" u2="ð" k="8" /> +<hkern u1="ç" u2="ë" k="8" /> +<hkern u1="ç" u2="ê" k="8" /> +<hkern u1="ç" u2="é" k="8" /> +<hkern u1="ç" u2="è" k="8" /> +<hkern u1="ç" u2="ç" k="8" /> +<hkern u1="ç" u2="Ý" k="143" /> +<hkern u1="ç" u2="Ü" k="18" /> +<hkern u1="ç" u2="Û" k="18" /> +<hkern u1="ç" u2="Ú" k="18" /> +<hkern u1="ç" u2="Ù" k="18" /> +<hkern u1="ç" u2="Ø" k="23" /> +<hkern u1="ç" u2="Ö" k="23" /> +<hkern u1="ç" u2="Õ" k="23" /> +<hkern u1="ç" u2="Ô" k="23" /> +<hkern u1="ç" u2="Ó" k="23" /> +<hkern u1="ç" u2="Ò" k="23" /> +<hkern u1="ç" u2="Ç" k="23" /> +<hkern u1="ç" u2="q" k="8" /> +<hkern u1="ç" u2="o" k="8" /> +<hkern u1="ç" u2="g" k="8" /> +<hkern u1="ç" u2="e" k="8" /> +<hkern u1="ç" u2="d" k="8" /> +<hkern u1="ç" u2="c" k="8" /> +<hkern u1="ç" u2="]" k="25" /> +<hkern u1="ç" u2="Y" k="143" /> +<hkern u1="ç" u2="V" k="63" /> +<hkern u1="ç" u2="U" k="18" /> +<hkern u1="ç" u2="T" k="197" /> +<hkern u1="ç" u2="S" k="23" /> +<hkern u1="ç" u2="Q" k="23" /> +<hkern u1="ç" u2="O" k="23" /> +<hkern u1="ç" u2="G" k="23" /> +<hkern u1="ç" u2="C" k="23" /> +<hkern u1="ç" u2="-" k="25" /> +<hkern u1="ç" u2=")" k="20" /> +<hkern u1="ç" u2="&" k="35" /> +<hkern u1="è" u2="™" k="43" /> +<hkern u1="è" u2="”" k="25" /> +<hkern u1="è" u2="“" k="23" /> +<hkern u1="è" u2="’" k="25" /> +<hkern u1="è" u2="‘" k="23" /> +<hkern u1="è" u2="Þ" k="23" /> +<hkern u1="è" u2="Ý" k="170" /> +<hkern u1="è" u2="Ü" k="27" /> +<hkern u1="è" u2="Û" k="27" /> +<hkern u1="è" u2="Ú" k="27" /> +<hkern u1="è" u2="Ù" k="27" /> +<hkern u1="è" u2="Ø" k="10" /> +<hkern u1="è" u2="Ö" k="10" /> +<hkern u1="è" u2="Õ" k="10" /> +<hkern u1="è" u2="Ô" k="10" /> +<hkern u1="è" u2="Ó" k="10" /> +<hkern u1="è" u2="Ò" k="10" /> +<hkern u1="è" u2="Ñ" k="23" /> +<hkern u1="è" u2="Ð" k="23" /> +<hkern u1="è" u2="Ï" k="23" /> +<hkern u1="è" u2="Î" k="23" /> +<hkern u1="è" u2="Í" k="23" /> +<hkern u1="è" u2="Ì" k="23" /> +<hkern u1="è" u2="Ë" k="23" /> +<hkern u1="è" u2="Ê" k="23" /> +<hkern u1="è" u2="É" k="23" /> +<hkern u1="è" u2="È" k="23" /> +<hkern u1="è" u2="Ç" k="10" /> +<hkern u1="è" u2="Å" k="10" /> +<hkern u1="è" u2="Ä" k="10" /> +<hkern u1="è" u2="Ã" k="10" /> +<hkern u1="è" u2="Â" k="10" /> +<hkern u1="è" u2="Á" k="10" /> +<hkern u1="è" u2="À" k="10" /> +<hkern u1="è" u2="}" k="39" /> +<hkern u1="è" u2="x" k="12" /> +<hkern u1="è" u2="v" k="10" /> +<hkern u1="è" u2="]" k="43" /> +<hkern u1="è" u2="\" k="39" /> +<hkern u1="è" u2="Y" k="170" /> +<hkern u1="è" u2="X" k="33" /> +<hkern u1="è" u2="V" k="111" /> +<hkern u1="è" u2="U" k="27" /> +<hkern u1="è" u2="T" k="166" /> +<hkern u1="è" u2="S" k="23" /> +<hkern u1="è" u2="R" k="23" /> +<hkern u1="è" u2="Q" k="10" /> +<hkern u1="è" u2="P" k="23" /> +<hkern u1="è" u2="O" k="10" /> +<hkern u1="è" u2="N" k="23" /> +<hkern u1="è" u2="M" k="23" /> +<hkern u1="è" u2="L" k="23" /> +<hkern u1="è" u2="K" k="23" /> +<hkern u1="è" u2="I" k="23" /> +<hkern u1="è" u2="H" k="23" /> +<hkern u1="è" u2="G" k="10" /> +<hkern u1="è" u2="F" k="23" /> +<hkern u1="è" u2="E" k="23" /> +<hkern u1="è" u2="D" k="23" /> +<hkern u1="è" u2="C" k="10" /> +<hkern u1="è" u2="B" k="23" /> +<hkern u1="è" u2="A" k="10" /> +<hkern u1="è" u2="?" k="35" /> +<hkern u1="è" u2="*" k="23" /> +<hkern u1="è" u2=")" k="43" /> +<hkern u1="è" u2="'" k="25" /> +<hkern u1="è" u2="&" k="12" /> +<hkern u1="è" u2=""" k="25" /> +<hkern u1="é" u2="™" k="43" /> +<hkern u1="é" u2="”" k="25" /> +<hkern u1="é" u2="“" k="23" /> +<hkern u1="é" u2="’" k="25" /> +<hkern u1="é" u2="‘" k="23" /> +<hkern u1="é" u2="Þ" k="23" /> +<hkern u1="é" u2="Ý" k="170" /> +<hkern u1="é" u2="Ü" k="27" /> +<hkern u1="é" u2="Û" k="27" /> +<hkern u1="é" u2="Ú" k="27" /> +<hkern u1="é" u2="Ù" k="27" /> +<hkern u1="é" u2="Ø" k="10" /> +<hkern u1="é" u2="Ö" k="10" /> +<hkern u1="é" u2="Õ" k="10" /> +<hkern u1="é" u2="Ô" k="10" /> +<hkern u1="é" u2="Ó" k="10" /> +<hkern u1="é" u2="Ò" k="10" /> +<hkern u1="é" u2="Ñ" k="23" /> +<hkern u1="é" u2="Ð" k="23" /> +<hkern u1="é" u2="Ï" k="23" /> +<hkern u1="é" u2="Î" k="23" /> +<hkern u1="é" u2="Í" k="23" /> +<hkern u1="é" u2="Ì" k="23" /> +<hkern u1="é" u2="Ë" k="23" /> +<hkern u1="é" u2="Ê" k="23" /> +<hkern u1="é" u2="É" k="23" /> +<hkern u1="é" u2="È" k="23" /> +<hkern u1="é" u2="Ç" k="10" /> +<hkern u1="é" u2="Å" k="10" /> +<hkern u1="é" u2="Ä" k="10" /> +<hkern u1="é" u2="Ã" k="10" /> +<hkern u1="é" u2="Â" k="10" /> +<hkern u1="é" u2="Á" k="10" /> +<hkern u1="é" u2="À" k="10" /> +<hkern u1="é" u2="}" k="39" /> +<hkern u1="é" u2="x" k="12" /> +<hkern u1="é" u2="v" k="10" /> +<hkern u1="é" u2="]" k="43" /> +<hkern u1="é" u2="\" k="39" /> +<hkern u1="é" u2="Y" k="170" /> +<hkern u1="é" u2="X" k="33" /> +<hkern u1="é" u2="V" k="111" /> +<hkern u1="é" u2="U" k="27" /> +<hkern u1="é" u2="T" k="166" /> +<hkern u1="é" u2="S" k="23" /> +<hkern u1="é" u2="R" k="23" /> +<hkern u1="é" u2="Q" k="10" /> +<hkern u1="é" u2="P" k="23" /> +<hkern u1="é" u2="O" k="10" /> +<hkern u1="é" u2="N" k="23" /> +<hkern u1="é" u2="M" k="23" /> +<hkern u1="é" u2="L" k="23" /> +<hkern u1="é" u2="K" k="23" /> +<hkern u1="é" u2="I" k="23" /> +<hkern u1="é" u2="H" k="23" /> +<hkern u1="é" u2="G" k="10" /> +<hkern u1="é" u2="F" k="23" /> +<hkern u1="é" u2="E" k="23" /> +<hkern u1="é" u2="D" k="23" /> +<hkern u1="é" u2="C" k="10" /> +<hkern u1="é" u2="B" k="23" /> +<hkern u1="é" u2="A" k="10" /> +<hkern u1="é" u2="?" k="35" /> +<hkern u1="é" u2="*" k="23" /> +<hkern u1="é" u2=")" k="43" /> +<hkern u1="é" u2="'" k="25" /> +<hkern u1="é" u2="&" k="12" /> +<hkern u1="é" u2=""" k="25" /> +<hkern u1="ê" u2="™" k="43" /> +<hkern u1="ê" u2="”" k="25" /> +<hkern u1="ê" u2="“" k="23" /> +<hkern u1="ê" u2="’" k="25" /> +<hkern u1="ê" u2="‘" k="23" /> +<hkern u1="ê" u2="Þ" k="23" /> +<hkern u1="ê" u2="Ý" k="170" /> +<hkern u1="ê" u2="Ü" k="27" /> +<hkern u1="ê" u2="Û" k="27" /> +<hkern u1="ê" u2="Ú" k="27" /> +<hkern u1="ê" u2="Ù" k="27" /> +<hkern u1="ê" u2="Ø" k="10" /> +<hkern u1="ê" u2="Ö" k="10" /> +<hkern u1="ê" u2="Õ" k="10" /> +<hkern u1="ê" u2="Ô" k="10" /> +<hkern u1="ê" u2="Ó" k="10" /> +<hkern u1="ê" u2="Ò" k="10" /> +<hkern u1="ê" u2="Ñ" k="23" /> +<hkern u1="ê" u2="Ð" k="23" /> +<hkern u1="ê" u2="Ï" k="23" /> +<hkern u1="ê" u2="Î" k="23" /> +<hkern u1="ê" u2="Í" k="23" /> +<hkern u1="ê" u2="Ì" k="23" /> +<hkern u1="ê" u2="Ë" k="23" /> +<hkern u1="ê" u2="Ê" k="23" /> +<hkern u1="ê" u2="É" k="23" /> +<hkern u1="ê" u2="È" k="23" /> +<hkern u1="ê" u2="Ç" k="10" /> +<hkern u1="ê" u2="Å" k="10" /> +<hkern u1="ê" u2="Ä" k="10" /> +<hkern u1="ê" u2="Ã" k="10" /> +<hkern u1="ê" u2="Â" k="10" /> +<hkern u1="ê" u2="Á" k="10" /> +<hkern u1="ê" u2="À" k="10" /> +<hkern u1="ê" u2="}" k="39" /> +<hkern u1="ê" u2="x" k="12" /> +<hkern u1="ê" u2="v" k="10" /> +<hkern u1="ê" u2="]" k="43" /> +<hkern u1="ê" u2="\" k="39" /> +<hkern u1="ê" u2="Y" k="170" /> +<hkern u1="ê" u2="X" k="33" /> +<hkern u1="ê" u2="V" k="111" /> +<hkern u1="ê" u2="U" k="27" /> +<hkern u1="ê" u2="T" k="166" /> +<hkern u1="ê" u2="S" k="23" /> +<hkern u1="ê" u2="R" k="23" /> +<hkern u1="ê" u2="Q" k="10" /> +<hkern u1="ê" u2="P" k="23" /> +<hkern u1="ê" u2="O" k="10" /> +<hkern u1="ê" u2="N" k="23" /> +<hkern u1="ê" u2="M" k="23" /> +<hkern u1="ê" u2="L" k="23" /> +<hkern u1="ê" u2="K" k="23" /> +<hkern u1="ê" u2="I" k="23" /> +<hkern u1="ê" u2="H" k="23" /> +<hkern u1="ê" u2="G" k="10" /> +<hkern u1="ê" u2="F" k="23" /> +<hkern u1="ê" u2="E" k="23" /> +<hkern u1="ê" u2="D" k="23" /> +<hkern u1="ê" u2="C" k="10" /> +<hkern u1="ê" u2="B" k="23" /> +<hkern u1="ê" u2="A" k="10" /> +<hkern u1="ê" u2="?" k="35" /> +<hkern u1="ê" u2="*" k="23" /> +<hkern u1="ê" u2=")" k="43" /> +<hkern u1="ê" u2="'" k="25" /> +<hkern u1="ê" u2="&" k="12" /> +<hkern u1="ê" u2=""" k="25" /> +<hkern u1="ë" u2="™" k="43" /> +<hkern u1="ë" u2="”" k="25" /> +<hkern u1="ë" u2="“" k="23" /> +<hkern u1="ë" u2="’" k="25" /> +<hkern u1="ë" u2="‘" k="23" /> +<hkern u1="ë" u2="Þ" k="23" /> +<hkern u1="ë" u2="Ý" k="170" /> +<hkern u1="ë" u2="Ü" k="27" /> +<hkern u1="ë" u2="Û" k="27" /> +<hkern u1="ë" u2="Ú" k="27" /> +<hkern u1="ë" u2="Ù" k="27" /> +<hkern u1="ë" u2="Ø" k="10" /> +<hkern u1="ë" u2="Ö" k="10" /> +<hkern u1="ë" u2="Õ" k="10" /> +<hkern u1="ë" u2="Ô" k="10" /> +<hkern u1="ë" u2="Ó" k="10" /> +<hkern u1="ë" u2="Ò" k="10" /> +<hkern u1="ë" u2="Ñ" k="23" /> +<hkern u1="ë" u2="Ð" k="23" /> +<hkern u1="ë" u2="Ï" k="23" /> +<hkern u1="ë" u2="Î" k="23" /> +<hkern u1="ë" u2="Í" k="23" /> +<hkern u1="ë" u2="Ì" k="23" /> +<hkern u1="ë" u2="Ë" k="23" /> +<hkern u1="ë" u2="Ê" k="23" /> +<hkern u1="ë" u2="É" k="23" /> +<hkern u1="ë" u2="È" k="23" /> +<hkern u1="ë" u2="Ç" k="10" /> +<hkern u1="ë" u2="Å" k="10" /> +<hkern u1="ë" u2="Ä" k="10" /> +<hkern u1="ë" u2="Ã" k="10" /> +<hkern u1="ë" u2="Â" k="10" /> +<hkern u1="ë" u2="Á" k="10" /> +<hkern u1="ë" u2="À" k="10" /> +<hkern u1="ë" u2="}" k="39" /> +<hkern u1="ë" u2="x" k="12" /> +<hkern u1="ë" u2="v" k="10" /> +<hkern u1="ë" u2="]" k="43" /> +<hkern u1="ë" u2="\" k="39" /> +<hkern u1="ë" u2="Y" k="170" /> +<hkern u1="ë" u2="X" k="33" /> +<hkern u1="ë" u2="V" k="111" /> +<hkern u1="ë" u2="U" k="27" /> +<hkern u1="ë" u2="T" k="166" /> +<hkern u1="ë" u2="S" k="23" /> +<hkern u1="ë" u2="R" k="23" /> +<hkern u1="ë" u2="Q" k="10" /> +<hkern u1="ë" u2="P" k="23" /> +<hkern u1="ë" u2="O" k="10" /> +<hkern u1="ë" u2="N" k="23" /> +<hkern u1="ë" u2="M" k="23" /> +<hkern u1="ë" u2="L" k="23" /> +<hkern u1="ë" u2="K" k="23" /> +<hkern u1="ë" u2="I" k="23" /> +<hkern u1="ë" u2="H" k="23" /> +<hkern u1="ë" u2="G" k="10" /> +<hkern u1="ë" u2="F" k="23" /> +<hkern u1="ë" u2="E" k="23" /> +<hkern u1="ë" u2="D" k="23" /> +<hkern u1="ë" u2="C" k="10" /> +<hkern u1="ë" u2="B" k="23" /> +<hkern u1="ë" u2="A" k="10" /> +<hkern u1="ë" u2="?" k="35" /> +<hkern u1="ë" u2="*" k="23" /> +<hkern u1="ë" u2=")" k="43" /> +<hkern u1="ë" u2="'" k="25" /> +<hkern u1="ë" u2="&" k="12" /> +<hkern u1="ë" u2=""" k="25" /> +<hkern u1="ì" u2="Þ" k="20" /> +<hkern u1="ì" u2="Ý" k="16" /> +<hkern u1="ì" u2="Ü" k="31" /> +<hkern u1="ì" u2="Û" k="31" /> +<hkern u1="ì" u2="Ú" k="31" /> +<hkern u1="ì" u2="Ù" k="31" /> +<hkern u1="ì" u2="Ø" k="20" /> +<hkern u1="ì" u2="Ö" k="20" /> +<hkern u1="ì" u2="Õ" k="20" /> +<hkern u1="ì" u2="Ô" k="20" /> +<hkern u1="ì" u2="Ó" k="20" /> +<hkern u1="ì" u2="Ò" k="20" /> +<hkern u1="ì" u2="Ñ" k="20" /> +<hkern u1="ì" u2="Ð" k="20" /> +<hkern u1="ì" u2="Ï" k="20" /> +<hkern u1="ì" u2="Î" k="20" /> +<hkern u1="ì" u2="Í" k="20" /> +<hkern u1="ì" u2="Ì" k="20" /> +<hkern u1="ì" u2="Ë" k="20" /> +<hkern u1="ì" u2="Ê" k="20" /> +<hkern u1="ì" u2="É" k="20" /> +<hkern u1="ì" u2="È" k="20" /> +<hkern u1="ì" u2="Ç" k="20" /> +<hkern u1="ì" u2="Å" k="14" /> +<hkern u1="ì" u2="Ä" k="14" /> +<hkern u1="ì" u2="Ã" k="14" /> +<hkern u1="ì" u2="Â" k="14" /> +<hkern u1="ì" u2="Á" k="14" /> +<hkern u1="ì" u2="À" k="14" /> +<hkern u1="ì" u2="Y" k="16" /> +<hkern u1="ì" u2="V" k="18" /> +<hkern u1="ì" u2="U" k="31" /> +<hkern u1="ì" u2="T" k="20" /> +<hkern u1="ì" u2="S" k="18" /> +<hkern u1="ì" u2="R" k="20" /> +<hkern u1="ì" u2="Q" k="20" /> +<hkern u1="ì" u2="P" k="20" /> +<hkern u1="ì" u2="O" k="20" /> +<hkern u1="ì" u2="N" k="20" /> +<hkern u1="ì" u2="M" k="20" /> +<hkern u1="ì" u2="L" k="20" /> +<hkern u1="ì" u2="K" k="20" /> +<hkern u1="ì" u2="I" k="20" /> +<hkern u1="ì" u2="H" k="20" /> +<hkern u1="ì" u2="G" k="20" /> +<hkern u1="ì" u2="F" k="20" /> +<hkern u1="ì" u2="E" k="20" /> +<hkern u1="ì" u2="D" k="20" /> +<hkern u1="ì" u2="C" k="20" /> +<hkern u1="ì" u2="B" k="20" /> +<hkern u1="ì" u2="A" k="14" /> +<hkern u1="ì" u2="&" k="16" /> +<hkern u1="í" u2="Þ" k="20" /> +<hkern u1="í" u2="Ý" k="16" /> +<hkern u1="í" u2="Ü" k="31" /> +<hkern u1="í" u2="Û" k="31" /> +<hkern u1="í" u2="Ú" k="31" /> +<hkern u1="í" u2="Ù" k="31" /> +<hkern u1="í" u2="Ø" k="20" /> +<hkern u1="í" u2="Ö" k="20" /> +<hkern u1="í" u2="Õ" k="20" /> +<hkern u1="í" u2="Ô" k="20" /> +<hkern u1="í" u2="Ó" k="20" /> +<hkern u1="í" u2="Ò" k="20" /> +<hkern u1="í" u2="Ñ" k="20" /> +<hkern u1="í" u2="Ð" k="20" /> +<hkern u1="í" u2="Ï" k="20" /> +<hkern u1="í" u2="Î" k="20" /> +<hkern u1="í" u2="Í" k="20" /> +<hkern u1="í" u2="Ì" k="20" /> +<hkern u1="í" u2="Ë" k="20" /> +<hkern u1="í" u2="Ê" k="20" /> +<hkern u1="í" u2="É" k="20" /> +<hkern u1="í" u2="È" k="20" /> +<hkern u1="í" u2="Ç" k="20" /> +<hkern u1="í" u2="Å" k="14" /> +<hkern u1="í" u2="Ä" k="14" /> +<hkern u1="í" u2="Ã" k="14" /> +<hkern u1="í" u2="Â" k="14" /> +<hkern u1="í" u2="Á" k="14" /> +<hkern u1="í" u2="À" k="14" /> +<hkern u1="í" u2="Y" k="16" /> +<hkern u1="í" u2="V" k="18" /> +<hkern u1="í" u2="U" k="31" /> +<hkern u1="í" u2="T" k="20" /> +<hkern u1="í" u2="S" k="18" /> +<hkern u1="í" u2="R" k="20" /> +<hkern u1="í" u2="Q" k="20" /> +<hkern u1="í" u2="P" k="20" /> +<hkern u1="í" u2="O" k="20" /> +<hkern u1="í" u2="N" k="20" /> +<hkern u1="í" u2="M" k="20" /> +<hkern u1="í" u2="L" k="20" /> +<hkern u1="í" u2="K" k="20" /> +<hkern u1="í" u2="I" k="20" /> +<hkern u1="í" u2="H" k="20" /> +<hkern u1="í" u2="G" k="20" /> +<hkern u1="í" u2="F" k="20" /> +<hkern u1="í" u2="E" k="20" /> +<hkern u1="í" u2="D" k="20" /> +<hkern u1="í" u2="C" k="20" /> +<hkern u1="í" u2="B" k="20" /> +<hkern u1="í" u2="A" k="14" /> +<hkern u1="í" u2="&" k="16" /> +<hkern u1="î" u2="Þ" k="20" /> +<hkern u1="î" u2="Ý" k="16" /> +<hkern u1="î" u2="Ü" k="31" /> +<hkern u1="î" u2="Û" k="31" /> +<hkern u1="î" u2="Ú" k="31" /> +<hkern u1="î" u2="Ù" k="31" /> +<hkern u1="î" u2="Ø" k="20" /> +<hkern u1="î" u2="Ö" k="20" /> +<hkern u1="î" u2="Õ" k="20" /> +<hkern u1="î" u2="Ô" k="20" /> +<hkern u1="î" u2="Ó" k="20" /> +<hkern u1="î" u2="Ò" k="20" /> +<hkern u1="î" u2="Ñ" k="20" /> +<hkern u1="î" u2="Ð" k="20" /> +<hkern u1="î" u2="Ï" k="20" /> +<hkern u1="î" u2="Î" k="20" /> +<hkern u1="î" u2="Í" k="20" /> +<hkern u1="î" u2="Ì" k="20" /> +<hkern u1="î" u2="Ë" k="20" /> +<hkern u1="î" u2="Ê" k="20" /> +<hkern u1="î" u2="É" k="20" /> +<hkern u1="î" u2="È" k="20" /> +<hkern u1="î" u2="Ç" k="20" /> +<hkern u1="î" u2="Å" k="14" /> +<hkern u1="î" u2="Ä" k="14" /> +<hkern u1="î" u2="Ã" k="14" /> +<hkern u1="î" u2="Â" k="14" /> +<hkern u1="î" u2="Á" k="14" /> +<hkern u1="î" u2="À" k="14" /> +<hkern u1="î" u2="Y" k="16" /> +<hkern u1="î" u2="V" k="18" /> +<hkern u1="î" u2="U" k="31" /> +<hkern u1="î" u2="T" k="20" /> +<hkern u1="î" u2="S" k="18" /> +<hkern u1="î" u2="R" k="20" /> +<hkern u1="î" u2="Q" k="20" /> +<hkern u1="î" u2="P" k="20" /> +<hkern u1="î" u2="O" k="20" /> +<hkern u1="î" u2="N" k="20" /> +<hkern u1="î" u2="M" k="20" /> +<hkern u1="î" u2="L" k="20" /> +<hkern u1="î" u2="K" k="20" /> +<hkern u1="î" u2="I" k="20" /> +<hkern u1="î" u2="H" k="20" /> +<hkern u1="î" u2="G" k="20" /> +<hkern u1="î" u2="F" k="20" /> +<hkern u1="î" u2="E" k="20" /> +<hkern u1="î" u2="D" k="20" /> +<hkern u1="î" u2="C" k="20" /> +<hkern u1="î" u2="B" k="20" /> +<hkern u1="î" u2="A" k="14" /> +<hkern u1="î" u2="?" k="-29" /> +<hkern u1="î" u2="*" k="-39" /> +<hkern u1="î" u2="&" k="16" /> +<hkern u1="ï" u2="™" k="-12" /> +<hkern u1="ï" u2="Þ" k="20" /> +<hkern u1="ï" u2="Ý" k="16" /> +<hkern u1="ï" u2="Ü" k="31" /> +<hkern u1="ï" u2="Û" k="31" /> +<hkern u1="ï" u2="Ú" k="31" /> +<hkern u1="ï" u2="Ù" k="31" /> +<hkern u1="ï" u2="Ø" k="20" /> +<hkern u1="ï" u2="Ö" k="20" /> +<hkern u1="ï" u2="Õ" k="20" /> +<hkern u1="ï" u2="Ô" k="20" /> +<hkern u1="ï" u2="Ó" k="20" /> +<hkern u1="ï" u2="Ò" k="20" /> +<hkern u1="ï" u2="Ñ" k="20" /> +<hkern u1="ï" u2="Ð" k="20" /> +<hkern u1="ï" u2="Ï" k="20" /> +<hkern u1="ï" u2="Î" k="20" /> +<hkern u1="ï" u2="Í" k="20" /> +<hkern u1="ï" u2="Ì" k="20" /> +<hkern u1="ï" u2="Ë" k="20" /> +<hkern u1="ï" u2="Ê" k="20" /> +<hkern u1="ï" u2="É" k="20" /> +<hkern u1="ï" u2="È" k="20" /> +<hkern u1="ï" u2="Ç" k="20" /> +<hkern u1="ï" u2="Å" k="14" /> +<hkern u1="ï" u2="Ä" k="14" /> +<hkern u1="ï" u2="Ã" k="14" /> +<hkern u1="ï" u2="Â" k="14" /> +<hkern u1="ï" u2="Á" k="14" /> +<hkern u1="ï" u2="À" k="14" /> +<hkern u1="ï" u2="Y" k="16" /> +<hkern u1="ï" u2="V" k="18" /> +<hkern u1="ï" u2="U" k="31" /> +<hkern u1="ï" u2="T" k="20" /> +<hkern u1="ï" u2="S" k="18" /> +<hkern u1="ï" u2="R" k="20" /> +<hkern u1="ï" u2="Q" k="20" /> +<hkern u1="ï" u2="P" k="20" /> +<hkern u1="ï" u2="O" k="20" /> +<hkern u1="ï" u2="N" k="20" /> +<hkern u1="ï" u2="M" k="20" /> +<hkern u1="ï" u2="L" k="20" /> +<hkern u1="ï" u2="K" k="20" /> +<hkern u1="ï" u2="I" k="20" /> +<hkern u1="ï" u2="H" k="20" /> +<hkern u1="ï" u2="G" k="20" /> +<hkern u1="ï" u2="F" k="20" /> +<hkern u1="ï" u2="E" k="20" /> +<hkern u1="ï" u2="D" k="20" /> +<hkern u1="ï" u2="C" k="20" /> +<hkern u1="ï" u2="B" k="20" /> +<hkern u1="ï" u2="A" k="14" /> +<hkern u1="ï" u2="*" k="-20" /> +<hkern u1="ï" u2="&" k="16" /> +<hkern u1="ð" u2="™" k="35" /> +<hkern u1="ð" u2="”" k="27" /> +<hkern u1="ð" u2="“" k="25" /> +<hkern u1="ð" u2="’" k="27" /> +<hkern u1="ð" u2="‘" k="25" /> +<hkern u1="ð" u2="}" k="37" /> +<hkern u1="ð" u2="x" k="23" /> +<hkern u1="ð" u2="v" k="8" /> +<hkern u1="ð" u2="]" k="39" /> +<hkern u1="ð" u2="\" k="25" /> +<hkern u1="ð" u2="?" k="25" /> +<hkern u1="ð" u2="*" k="20" /> +<hkern u1="ð" u2=")" k="43" /> +<hkern u1="ð" u2="'" k="27" /> +<hkern u1="ð" u2="&" k="10" /> +<hkern u1="ð" u2=""" k="27" /> +<hkern u1="ñ" u2="ffl" k="10" /> +<hkern u1="ñ" u2="ffi" k="10" /> +<hkern u1="ñ" u2="fl" k="10" /> +<hkern u1="ñ" u2="fi" k="10" /> +<hkern u1="ñ" u2="™" k="49" /> +<hkern u1="ñ" u2="”" k="29" /> +<hkern u1="ñ" u2="“" k="23" /> +<hkern u1="ñ" u2="’" k="29" /> +<hkern u1="ñ" u2="‘" k="23" /> +<hkern u1="ñ" u2="ÿ" k="12" /> +<hkern u1="ñ" u2="ý" k="12" /> +<hkern u1="ñ" u2="ß" k="10" /> +<hkern u1="ñ" u2="Þ" k="29" /> +<hkern u1="ñ" u2="Ý" k="166" /> +<hkern u1="ñ" u2="Ü" k="43" /> +<hkern u1="ñ" u2="Û" k="43" /> +<hkern u1="ñ" u2="Ú" k="43" /> +<hkern u1="ñ" u2="Ù" k="43" /> +<hkern u1="ñ" u2="Ø" k="20" /> +<hkern u1="ñ" u2="Ö" k="20" /> +<hkern u1="ñ" u2="Õ" k="20" /> +<hkern u1="ñ" u2="Ô" k="20" /> +<hkern u1="ñ" u2="Ó" k="20" /> +<hkern u1="ñ" u2="Ò" k="20" /> +<hkern u1="ñ" u2="Ñ" k="29" /> +<hkern u1="ñ" u2="Ð" k="29" /> +<hkern u1="ñ" u2="Ï" k="29" /> +<hkern u1="ñ" u2="Î" k="29" /> +<hkern u1="ñ" u2="Í" k="29" /> +<hkern u1="ñ" u2="Ì" k="29" /> +<hkern u1="ñ" u2="Ë" k="29" /> +<hkern u1="ñ" u2="Ê" k="29" /> +<hkern u1="ñ" u2="É" k="29" /> +<hkern u1="ñ" u2="È" k="29" /> +<hkern u1="ñ" u2="Ç" k="20" /> +<hkern u1="ñ" u2="Å" k="10" /> +<hkern u1="ñ" u2="Ä" k="10" /> +<hkern u1="ñ" u2="Ã" k="10" /> +<hkern u1="ñ" u2="Â" k="10" /> +<hkern u1="ñ" u2="Á" k="10" /> +<hkern u1="ñ" u2="À" k="10" /> +<hkern u1="ñ" u2="}" k="41" /> +<hkern u1="ñ" u2="y" k="12" /> +<hkern u1="ñ" u2="v" k="18" /> +<hkern u1="ñ" u2="t" k="8" /> +<hkern u1="ñ" u2="f" k="10" /> +<hkern u1="ñ" u2="]" k="47" /> +<hkern u1="ñ" u2="\" k="45" /> +<hkern u1="ñ" u2="Y" k="166" /> +<hkern u1="ñ" u2="X" k="12" /> +<hkern u1="ñ" u2="V" k="106" /> +<hkern u1="ñ" u2="U" k="43" /> +<hkern u1="ñ" u2="T" k="184" /> +<hkern u1="ñ" u2="S" k="23" /> +<hkern u1="ñ" u2="R" k="29" /> +<hkern u1="ñ" u2="Q" k="20" /> +<hkern u1="ñ" u2="P" k="29" /> +<hkern u1="ñ" u2="O" k="20" /> +<hkern u1="ñ" u2="N" k="29" /> +<hkern u1="ñ" u2="M" k="29" /> +<hkern u1="ñ" u2="L" k="29" /> +<hkern u1="ñ" u2="K" k="29" /> +<hkern u1="ñ" u2="I" k="29" /> +<hkern u1="ñ" u2="H" k="29" /> +<hkern u1="ñ" u2="G" k="20" /> +<hkern u1="ñ" u2="F" k="29" /> +<hkern u1="ñ" u2="E" k="29" /> +<hkern u1="ñ" u2="D" k="29" /> +<hkern u1="ñ" u2="C" k="20" /> +<hkern u1="ñ" u2="B" k="29" /> +<hkern u1="ñ" u2="A" k="10" /> +<hkern u1="ñ" u2="?" k="37" /> +<hkern u1="ñ" u2="*" k="27" /> +<hkern u1="ñ" u2=")" k="41" /> +<hkern u1="ñ" u2="'" k="29" /> +<hkern u1="ñ" u2="&" k="12" /> +<hkern u1="ñ" u2=""" k="29" /> +<hkern u1="ò" u2="ffl" k="10" /> +<hkern u1="ò" u2="ffi" k="10" /> +<hkern u1="ò" u2="fl" k="10" /> +<hkern u1="ò" u2="fi" k="10" /> +<hkern u1="ò" u2="™" k="47" /> +<hkern u1="ò" u2="”" k="33" /> +<hkern u1="ò" u2="“" k="31" /> +<hkern u1="ò" u2="’" k="33" /> +<hkern u1="ò" u2="‘" k="31" /> +<hkern u1="ò" u2="ÿ" k="10" /> +<hkern u1="ò" u2="ý" k="10" /> +<hkern u1="ò" u2="ß" k="10" /> +<hkern u1="ò" u2="Þ" k="29" /> +<hkern u1="ò" u2="Ý" k="178" /> +<hkern u1="ò" u2="Ü" k="31" /> +<hkern u1="ò" u2="Û" k="31" /> +<hkern u1="ò" u2="Ú" k="31" /> +<hkern u1="ò" u2="Ù" k="31" /> +<hkern u1="ò" u2="Ø" k="12" /> +<hkern u1="ò" u2="Ö" k="12" /> +<hkern u1="ò" u2="Õ" k="12" /> +<hkern u1="ò" u2="Ô" k="12" /> +<hkern u1="ò" u2="Ó" k="12" /> +<hkern u1="ò" u2="Ò" k="12" /> +<hkern u1="ò" u2="Ñ" k="29" /> +<hkern u1="ò" u2="Ð" k="29" /> +<hkern u1="ò" u2="Ï" k="29" /> +<hkern u1="ò" u2="Î" k="29" /> +<hkern u1="ò" u2="Í" k="29" /> +<hkern u1="ò" u2="Ì" k="29" /> +<hkern u1="ò" u2="Ë" k="29" /> +<hkern u1="ò" u2="Ê" k="29" /> +<hkern u1="ò" u2="É" k="29" /> +<hkern u1="ò" u2="È" k="29" /> +<hkern u1="ò" u2="Ç" k="12" /> +<hkern u1="ò" u2="Å" k="25" /> +<hkern u1="ò" u2="Ä" k="25" /> +<hkern u1="ò" u2="Ã" k="25" /> +<hkern u1="ò" u2="Â" k="25" /> +<hkern u1="ò" u2="Á" k="25" /> +<hkern u1="ò" u2="À" k="25" /> +<hkern u1="ò" u2="}" k="47" /> +<hkern u1="ò" u2="y" k="10" /> +<hkern u1="ò" u2="x" k="31" /> +<hkern u1="ò" u2="v" k="14" /> +<hkern u1="ò" u2="t" k="8" /> +<hkern u1="ò" u2="f" k="10" /> +<hkern u1="ò" u2="]" k="51" /> +<hkern u1="ò" u2="\" k="45" /> +<hkern u1="ò" u2="Y" k="178" /> +<hkern u1="ò" u2="X" k="84" /> +<hkern u1="ò" u2="V" k="109" /> +<hkern u1="ò" u2="U" k="31" /> +<hkern u1="ò" u2="T" k="176" /> +<hkern u1="ò" u2="S" k="29" /> +<hkern u1="ò" u2="R" k="29" /> +<hkern u1="ò" u2="Q" k="12" /> +<hkern u1="ò" u2="P" k="29" /> +<hkern u1="ò" u2="O" k="12" /> +<hkern u1="ò" u2="N" k="29" /> +<hkern u1="ò" u2="M" k="29" /> +<hkern u1="ò" u2="L" k="29" /> +<hkern u1="ò" u2="K" k="29" /> +<hkern u1="ò" u2="I" k="29" /> +<hkern u1="ò" u2="H" k="29" /> +<hkern u1="ò" u2="G" k="12" /> +<hkern u1="ò" u2="F" k="29" /> +<hkern u1="ò" u2="E" k="29" /> +<hkern u1="ò" u2="D" k="29" /> +<hkern u1="ò" u2="C" k="12" /> +<hkern u1="ò" u2="B" k="29" /> +<hkern u1="ò" u2="A" k="25" /> +<hkern u1="ò" u2="?" k="41" /> +<hkern u1="ò" u2="*" k="29" /> +<hkern u1="ò" u2=")" k="55" /> +<hkern u1="ò" u2="'" k="33" /> +<hkern u1="ò" u2=""" k="33" /> +<hkern u1="ó" u2="ffl" k="10" /> +<hkern u1="ó" u2="ffi" k="10" /> +<hkern u1="ó" u2="fl" k="10" /> +<hkern u1="ó" u2="fi" k="10" /> +<hkern u1="ó" u2="™" k="47" /> +<hkern u1="ó" u2="”" k="33" /> +<hkern u1="ó" u2="“" k="31" /> +<hkern u1="ó" u2="’" k="33" /> +<hkern u1="ó" u2="‘" k="31" /> +<hkern u1="ó" u2="ÿ" k="10" /> +<hkern u1="ó" u2="ý" k="10" /> +<hkern u1="ó" u2="ß" k="10" /> +<hkern u1="ó" u2="Þ" k="29" /> +<hkern u1="ó" u2="Ý" k="178" /> +<hkern u1="ó" u2="Ü" k="31" /> +<hkern u1="ó" u2="Û" k="31" /> +<hkern u1="ó" u2="Ú" k="31" /> +<hkern u1="ó" u2="Ù" k="31" /> +<hkern u1="ó" u2="Ø" k="12" /> +<hkern u1="ó" u2="Ö" k="12" /> +<hkern u1="ó" u2="Õ" k="12" /> +<hkern u1="ó" u2="Ô" k="12" /> +<hkern u1="ó" u2="Ó" k="12" /> +<hkern u1="ó" u2="Ò" k="12" /> +<hkern u1="ó" u2="Ñ" k="29" /> +<hkern u1="ó" u2="Ð" k="29" /> +<hkern u1="ó" u2="Ï" k="29" /> +<hkern u1="ó" u2="Î" k="29" /> +<hkern u1="ó" u2="Í" k="29" /> +<hkern u1="ó" u2="Ì" k="29" /> +<hkern u1="ó" u2="Ë" k="29" /> +<hkern u1="ó" u2="Ê" k="29" /> +<hkern u1="ó" u2="É" k="29" /> +<hkern u1="ó" u2="È" k="29" /> +<hkern u1="ó" u2="Ç" k="12" /> +<hkern u1="ó" u2="Å" k="25" /> +<hkern u1="ó" u2="Ä" k="25" /> +<hkern u1="ó" u2="Ã" k="25" /> +<hkern u1="ó" u2="Â" k="25" /> +<hkern u1="ó" u2="Á" k="25" /> +<hkern u1="ó" u2="À" k="25" /> +<hkern u1="ó" u2="}" k="47" /> +<hkern u1="ó" u2="y" k="10" /> +<hkern u1="ó" u2="x" k="31" /> +<hkern u1="ó" u2="v" k="14" /> +<hkern u1="ó" u2="t" k="8" /> +<hkern u1="ó" u2="f" k="10" /> +<hkern u1="ó" u2="]" k="51" /> +<hkern u1="ó" u2="\" k="45" /> +<hkern u1="ó" u2="Y" k="178" /> +<hkern u1="ó" u2="X" k="84" /> +<hkern u1="ó" u2="V" k="109" /> +<hkern u1="ó" u2="U" k="31" /> +<hkern u1="ó" u2="T" k="176" /> +<hkern u1="ó" u2="S" k="29" /> +<hkern u1="ó" u2="R" k="29" /> +<hkern u1="ó" u2="Q" k="12" /> +<hkern u1="ó" u2="P" k="29" /> +<hkern u1="ó" u2="O" k="12" /> +<hkern u1="ó" u2="N" k="29" /> +<hkern u1="ó" u2="M" k="29" /> +<hkern u1="ó" u2="L" k="29" /> +<hkern u1="ó" u2="K" k="29" /> +<hkern u1="ó" u2="I" k="29" /> +<hkern u1="ó" u2="H" k="29" /> +<hkern u1="ó" u2="G" k="12" /> +<hkern u1="ó" u2="F" k="29" /> +<hkern u1="ó" u2="E" k="29" /> +<hkern u1="ó" u2="D" k="29" /> +<hkern u1="ó" u2="C" k="12" /> +<hkern u1="ó" u2="B" k="29" /> +<hkern u1="ó" u2="A" k="25" /> +<hkern u1="ó" u2="?" k="41" /> +<hkern u1="ó" u2="*" k="29" /> +<hkern u1="ó" u2=")" k="55" /> +<hkern u1="ó" u2="'" k="33" /> +<hkern u1="ó" u2=""" k="33" /> +<hkern u1="ô" u2="ffl" k="10" /> +<hkern u1="ô" u2="ffi" k="10" /> +<hkern u1="ô" u2="fl" k="10" /> +<hkern u1="ô" u2="fi" k="10" /> +<hkern u1="ô" u2="™" k="47" /> +<hkern u1="ô" u2="”" k="33" /> +<hkern u1="ô" u2="“" k="31" /> +<hkern u1="ô" u2="’" k="33" /> +<hkern u1="ô" u2="‘" k="31" /> +<hkern u1="ô" u2="ÿ" k="10" /> +<hkern u1="ô" u2="ý" k="10" /> +<hkern u1="ô" u2="ß" k="10" /> +<hkern u1="ô" u2="Þ" k="29" /> +<hkern u1="ô" u2="Ý" k="178" /> +<hkern u1="ô" u2="Ü" k="31" /> +<hkern u1="ô" u2="Û" k="31" /> +<hkern u1="ô" u2="Ú" k="31" /> +<hkern u1="ô" u2="Ù" k="31" /> +<hkern u1="ô" u2="Ø" k="12" /> +<hkern u1="ô" u2="Ö" k="12" /> +<hkern u1="ô" u2="Õ" k="12" /> +<hkern u1="ô" u2="Ô" k="12" /> +<hkern u1="ô" u2="Ó" k="12" /> +<hkern u1="ô" u2="Ò" k="12" /> +<hkern u1="ô" u2="Ñ" k="29" /> +<hkern u1="ô" u2="Ð" k="29" /> +<hkern u1="ô" u2="Ï" k="29" /> +<hkern u1="ô" u2="Î" k="29" /> +<hkern u1="ô" u2="Í" k="29" /> +<hkern u1="ô" u2="Ì" k="29" /> +<hkern u1="ô" u2="Ë" k="29" /> +<hkern u1="ô" u2="Ê" k="29" /> +<hkern u1="ô" u2="É" k="29" /> +<hkern u1="ô" u2="È" k="29" /> +<hkern u1="ô" u2="Ç" k="12" /> +<hkern u1="ô" u2="Å" k="25" /> +<hkern u1="ô" u2="Ä" k="25" /> +<hkern u1="ô" u2="Ã" k="25" /> +<hkern u1="ô" u2="Â" k="25" /> +<hkern u1="ô" u2="Á" k="25" /> +<hkern u1="ô" u2="À" k="25" /> +<hkern u1="ô" u2="}" k="47" /> +<hkern u1="ô" u2="y" k="10" /> +<hkern u1="ô" u2="x" k="31" /> +<hkern u1="ô" u2="v" k="14" /> +<hkern u1="ô" u2="t" k="8" /> +<hkern u1="ô" u2="f" k="10" /> +<hkern u1="ô" u2="]" k="51" /> +<hkern u1="ô" u2="\" k="45" /> +<hkern u1="ô" u2="Y" k="178" /> +<hkern u1="ô" u2="X" k="84" /> +<hkern u1="ô" u2="V" k="109" /> +<hkern u1="ô" u2="U" k="31" /> +<hkern u1="ô" u2="T" k="176" /> +<hkern u1="ô" u2="S" k="29" /> +<hkern u1="ô" u2="R" k="29" /> +<hkern u1="ô" u2="Q" k="12" /> +<hkern u1="ô" u2="P" k="29" /> +<hkern u1="ô" u2="O" k="12" /> +<hkern u1="ô" u2="N" k="29" /> +<hkern u1="ô" u2="M" k="29" /> +<hkern u1="ô" u2="L" k="29" /> +<hkern u1="ô" u2="K" k="29" /> +<hkern u1="ô" u2="I" k="29" /> +<hkern u1="ô" u2="H" k="29" /> +<hkern u1="ô" u2="G" k="12" /> +<hkern u1="ô" u2="F" k="29" /> +<hkern u1="ô" u2="E" k="29" /> +<hkern u1="ô" u2="D" k="29" /> +<hkern u1="ô" u2="C" k="12" /> +<hkern u1="ô" u2="B" k="29" /> +<hkern u1="ô" u2="A" k="25" /> +<hkern u1="ô" u2="?" k="41" /> +<hkern u1="ô" u2="*" k="29" /> +<hkern u1="ô" u2=")" k="55" /> +<hkern u1="ô" u2="'" k="33" /> +<hkern u1="ô" u2=""" k="33" /> +<hkern u1="õ" u2="ffl" k="10" /> +<hkern u1="õ" u2="ffi" k="10" /> +<hkern u1="õ" u2="fl" k="10" /> +<hkern u1="õ" u2="fi" k="10" /> +<hkern u1="õ" u2="™" k="47" /> +<hkern u1="õ" u2="”" k="33" /> +<hkern u1="õ" u2="“" k="31" /> +<hkern u1="õ" u2="’" k="33" /> +<hkern u1="õ" u2="‘" k="31" /> +<hkern u1="õ" u2="ÿ" k="10" /> +<hkern u1="õ" u2="ý" k="10" /> +<hkern u1="õ" u2="ß" k="10" /> +<hkern u1="õ" u2="Þ" k="29" /> +<hkern u1="õ" u2="Ý" k="178" /> +<hkern u1="õ" u2="Ü" k="31" /> +<hkern u1="õ" u2="Û" k="31" /> +<hkern u1="õ" u2="Ú" k="31" /> +<hkern u1="õ" u2="Ù" k="31" /> +<hkern u1="õ" u2="Ø" k="12" /> +<hkern u1="õ" u2="Ö" k="12" /> +<hkern u1="õ" u2="Õ" k="12" /> +<hkern u1="õ" u2="Ô" k="12" /> +<hkern u1="õ" u2="Ó" k="12" /> +<hkern u1="õ" u2="Ò" k="12" /> +<hkern u1="õ" u2="Ñ" k="29" /> +<hkern u1="õ" u2="Ð" k="29" /> +<hkern u1="õ" u2="Ï" k="29" /> +<hkern u1="õ" u2="Î" k="29" /> +<hkern u1="õ" u2="Í" k="29" /> +<hkern u1="õ" u2="Ì" k="29" /> +<hkern u1="õ" u2="Ë" k="29" /> +<hkern u1="õ" u2="Ê" k="29" /> +<hkern u1="õ" u2="É" k="29" /> +<hkern u1="õ" u2="È" k="29" /> +<hkern u1="õ" u2="Ç" k="12" /> +<hkern u1="õ" u2="Å" k="25" /> +<hkern u1="õ" u2="Ä" k="25" /> +<hkern u1="õ" u2="Ã" k="25" /> +<hkern u1="õ" u2="Â" k="25" /> +<hkern u1="õ" u2="Á" k="25" /> +<hkern u1="õ" u2="À" k="25" /> +<hkern u1="õ" u2="}" k="47" /> +<hkern u1="õ" u2="y" k="10" /> +<hkern u1="õ" u2="x" k="31" /> +<hkern u1="õ" u2="v" k="14" /> +<hkern u1="õ" u2="t" k="8" /> +<hkern u1="õ" u2="f" k="10" /> +<hkern u1="õ" u2="]" k="51" /> +<hkern u1="õ" u2="\" k="45" /> +<hkern u1="õ" u2="Y" k="178" /> +<hkern u1="õ" u2="X" k="84" /> +<hkern u1="õ" u2="V" k="109" /> +<hkern u1="õ" u2="U" k="31" /> +<hkern u1="õ" u2="T" k="176" /> +<hkern u1="õ" u2="S" k="29" /> +<hkern u1="õ" u2="R" k="29" /> +<hkern u1="õ" u2="Q" k="12" /> +<hkern u1="õ" u2="P" k="29" /> +<hkern u1="õ" u2="O" k="12" /> +<hkern u1="õ" u2="N" k="29" /> +<hkern u1="õ" u2="M" k="29" /> +<hkern u1="õ" u2="L" k="29" /> +<hkern u1="õ" u2="K" k="29" /> +<hkern u1="õ" u2="I" k="29" /> +<hkern u1="õ" u2="H" k="29" /> +<hkern u1="õ" u2="G" k="12" /> +<hkern u1="õ" u2="F" k="29" /> +<hkern u1="õ" u2="E" k="29" /> +<hkern u1="õ" u2="D" k="29" /> +<hkern u1="õ" u2="C" k="12" /> +<hkern u1="õ" u2="B" k="29" /> +<hkern u1="õ" u2="A" k="25" /> +<hkern u1="õ" u2="?" k="41" /> +<hkern u1="õ" u2="*" k="29" /> +<hkern u1="õ" u2=")" k="55" /> +<hkern u1="õ" u2="'" k="33" /> +<hkern u1="õ" u2=""" k="33" /> +<hkern u1="ö" u2="ffl" k="10" /> +<hkern u1="ö" u2="ffi" k="10" /> +<hkern u1="ö" u2="fl" k="10" /> +<hkern u1="ö" u2="fi" k="10" /> +<hkern u1="ö" u2="™" k="47" /> +<hkern u1="ö" u2="”" k="33" /> +<hkern u1="ö" u2="“" k="31" /> +<hkern u1="ö" u2="’" k="33" /> +<hkern u1="ö" u2="‘" k="31" /> +<hkern u1="ö" u2="ÿ" k="10" /> +<hkern u1="ö" u2="ý" k="10" /> +<hkern u1="ö" u2="ß" k="10" /> +<hkern u1="ö" u2="Þ" k="29" /> +<hkern u1="ö" u2="Ý" k="178" /> +<hkern u1="ö" u2="Ü" k="31" /> +<hkern u1="ö" u2="Û" k="31" /> +<hkern u1="ö" u2="Ú" k="31" /> +<hkern u1="ö" u2="Ù" k="31" /> +<hkern u1="ö" u2="Ø" k="12" /> +<hkern u1="ö" u2="Ö" k="12" /> +<hkern u1="ö" u2="Õ" k="12" /> +<hkern u1="ö" u2="Ô" k="12" /> +<hkern u1="ö" u2="Ó" k="12" /> +<hkern u1="ö" u2="Ò" k="12" /> +<hkern u1="ö" u2="Ñ" k="29" /> +<hkern u1="ö" u2="Ð" k="29" /> +<hkern u1="ö" u2="Ï" k="29" /> +<hkern u1="ö" u2="Î" k="29" /> +<hkern u1="ö" u2="Í" k="29" /> +<hkern u1="ö" u2="Ì" k="29" /> +<hkern u1="ö" u2="Ë" k="29" /> +<hkern u1="ö" u2="Ê" k="29" /> +<hkern u1="ö" u2="É" k="29" /> +<hkern u1="ö" u2="È" k="29" /> +<hkern u1="ö" u2="Ç" k="12" /> +<hkern u1="ö" u2="Å" k="25" /> +<hkern u1="ö" u2="Ä" k="25" /> +<hkern u1="ö" u2="Ã" k="25" /> +<hkern u1="ö" u2="Â" k="25" /> +<hkern u1="ö" u2="Á" k="25" /> +<hkern u1="ö" u2="À" k="25" /> +<hkern u1="ö" u2="}" k="47" /> +<hkern u1="ö" u2="y" k="10" /> +<hkern u1="ö" u2="x" k="31" /> +<hkern u1="ö" u2="v" k="14" /> +<hkern u1="ö" u2="t" k="8" /> +<hkern u1="ö" u2="f" k="10" /> +<hkern u1="ö" u2="]" k="51" /> +<hkern u1="ö" u2="\" k="45" /> +<hkern u1="ö" u2="Y" k="178" /> +<hkern u1="ö" u2="X" k="84" /> +<hkern u1="ö" u2="V" k="109" /> +<hkern u1="ö" u2="U" k="31" /> +<hkern u1="ö" u2="T" k="176" /> +<hkern u1="ö" u2="S" k="29" /> +<hkern u1="ö" u2="R" k="29" /> +<hkern u1="ö" u2="Q" k="12" /> +<hkern u1="ö" u2="P" k="29" /> +<hkern u1="ö" u2="O" k="12" /> +<hkern u1="ö" u2="N" k="29" /> +<hkern u1="ö" u2="M" k="29" /> +<hkern u1="ö" u2="L" k="29" /> +<hkern u1="ö" u2="K" k="29" /> +<hkern u1="ö" u2="I" k="29" /> +<hkern u1="ö" u2="H" k="29" /> +<hkern u1="ö" u2="G" k="12" /> +<hkern u1="ö" u2="F" k="29" /> +<hkern u1="ö" u2="E" k="29" /> +<hkern u1="ö" u2="D" k="29" /> +<hkern u1="ö" u2="C" k="12" /> +<hkern u1="ö" u2="B" k="29" /> +<hkern u1="ö" u2="A" k="25" /> +<hkern u1="ö" u2="?" k="41" /> +<hkern u1="ö" u2="*" k="29" /> +<hkern u1="ö" u2=")" k="55" /> +<hkern u1="ö" u2="'" k="33" /> +<hkern u1="ö" u2=""" k="33" /> +<hkern u1="ø" u2="ffl" k="10" /> +<hkern u1="ø" u2="ffi" k="10" /> +<hkern u1="ø" u2="fl" k="10" /> +<hkern u1="ø" u2="fi" k="10" /> +<hkern u1="ø" u2="™" k="47" /> +<hkern u1="ø" u2="”" k="33" /> +<hkern u1="ø" u2="“" k="31" /> +<hkern u1="ø" u2="’" k="33" /> +<hkern u1="ø" u2="‘" k="31" /> +<hkern u1="ø" u2="ÿ" k="10" /> +<hkern u1="ø" u2="ý" k="10" /> +<hkern u1="ø" u2="ß" k="10" /> +<hkern u1="ø" u2="Þ" k="29" /> +<hkern u1="ø" u2="Ý" k="178" /> +<hkern u1="ø" u2="Ü" k="31" /> +<hkern u1="ø" u2="Û" k="31" /> +<hkern u1="ø" u2="Ú" k="31" /> +<hkern u1="ø" u2="Ù" k="31" /> +<hkern u1="ø" u2="Ø" k="12" /> +<hkern u1="ø" u2="Ö" k="12" /> +<hkern u1="ø" u2="Õ" k="12" /> +<hkern u1="ø" u2="Ô" k="12" /> +<hkern u1="ø" u2="Ó" k="12" /> +<hkern u1="ø" u2="Ò" k="12" /> +<hkern u1="ø" u2="Ñ" k="29" /> +<hkern u1="ø" u2="Ð" k="29" /> +<hkern u1="ø" u2="Ï" k="29" /> +<hkern u1="ø" u2="Î" k="29" /> +<hkern u1="ø" u2="Í" k="29" /> +<hkern u1="ø" u2="Ì" k="29" /> +<hkern u1="ø" u2="Ë" k="29" /> +<hkern u1="ø" u2="Ê" k="29" /> +<hkern u1="ø" u2="É" k="29" /> +<hkern u1="ø" u2="È" k="29" /> +<hkern u1="ø" u2="Ç" k="12" /> +<hkern u1="ø" u2="Å" k="25" /> +<hkern u1="ø" u2="Ä" k="25" /> +<hkern u1="ø" u2="Ã" k="25" /> +<hkern u1="ø" u2="Â" k="25" /> +<hkern u1="ø" u2="Á" k="25" /> +<hkern u1="ø" u2="À" k="25" /> +<hkern u1="ø" u2="}" k="47" /> +<hkern u1="ø" u2="y" k="10" /> +<hkern u1="ø" u2="x" k="31" /> +<hkern u1="ø" u2="v" k="14" /> +<hkern u1="ø" u2="t" k="8" /> +<hkern u1="ø" u2="f" k="10" /> +<hkern u1="ø" u2="]" k="51" /> +<hkern u1="ø" u2="\" k="45" /> +<hkern u1="ø" u2="Y" k="178" /> +<hkern u1="ø" u2="X" k="84" /> +<hkern u1="ø" u2="V" k="109" /> +<hkern u1="ø" u2="U" k="31" /> +<hkern u1="ø" u2="T" k="176" /> +<hkern u1="ø" u2="S" k="29" /> +<hkern u1="ø" u2="R" k="29" /> +<hkern u1="ø" u2="Q" k="12" /> +<hkern u1="ø" u2="P" k="29" /> +<hkern u1="ø" u2="O" k="12" /> +<hkern u1="ø" u2="N" k="29" /> +<hkern u1="ø" u2="M" k="29" /> +<hkern u1="ø" u2="L" k="29" /> +<hkern u1="ø" u2="K" k="29" /> +<hkern u1="ø" u2="I" k="29" /> +<hkern u1="ø" u2="H" k="29" /> +<hkern u1="ø" u2="G" k="12" /> +<hkern u1="ø" u2="F" k="29" /> +<hkern u1="ø" u2="E" k="29" /> +<hkern u1="ø" u2="D" k="29" /> +<hkern u1="ø" u2="C" k="12" /> +<hkern u1="ø" u2="B" k="29" /> +<hkern u1="ø" u2="A" k="25" /> +<hkern u1="ø" u2="?" k="41" /> +<hkern u1="ø" u2="*" k="29" /> +<hkern u1="ø" u2=")" k="55" /> +<hkern u1="ø" u2="'" k="33" /> +<hkern u1="ø" u2=""" k="33" /> +<hkern u1="ù" u2="™" k="37" /> +<hkern u1="ù" u2="Þ" k="20" /> +<hkern u1="ù" u2="Ý" k="143" /> +<hkern u1="ù" u2="Ü" k="37" /> +<hkern u1="ù" u2="Û" k="37" /> +<hkern u1="ù" u2="Ú" k="37" /> +<hkern u1="ù" u2="Ù" k="37" /> +<hkern u1="ù" u2="Ø" k="18" /> +<hkern u1="ù" u2="Ö" k="18" /> +<hkern u1="ù" u2="Õ" k="18" /> +<hkern u1="ù" u2="Ô" k="18" /> +<hkern u1="ù" u2="Ó" k="18" /> +<hkern u1="ù" u2="Ò" k="18" /> +<hkern u1="ù" u2="Ñ" k="20" /> +<hkern u1="ù" u2="Ð" k="20" /> +<hkern u1="ù" u2="Ï" k="20" /> +<hkern u1="ù" u2="Î" k="20" /> +<hkern u1="ù" u2="Í" k="20" /> +<hkern u1="ù" u2="Ì" k="20" /> +<hkern u1="ù" u2="Ë" k="20" /> +<hkern u1="ù" u2="Ê" k="20" /> +<hkern u1="ù" u2="É" k="20" /> +<hkern u1="ù" u2="È" k="20" /> +<hkern u1="ù" u2="Ç" k="18" /> +<hkern u1="ù" u2="Å" k="12" /> +<hkern u1="ù" u2="Ä" k="12" /> +<hkern u1="ù" u2="Ã" k="12" /> +<hkern u1="ù" u2="Â" k="12" /> +<hkern u1="ù" u2="Á" k="12" /> +<hkern u1="ù" u2="À" k="12" /> +<hkern u1="ù" u2="}" k="37" /> +<hkern u1="ù" u2="]" k="41" /> +<hkern u1="ù" u2="\" k="31" /> +<hkern u1="ù" u2="Y" k="143" /> +<hkern u1="ù" u2="X" k="16" /> +<hkern u1="ù" u2="V" k="90" /> +<hkern u1="ù" u2="U" k="37" /> +<hkern u1="ù" u2="T" k="137" /> +<hkern u1="ù" u2="S" k="16" /> +<hkern u1="ù" u2="R" k="20" /> +<hkern u1="ù" u2="Q" k="18" /> +<hkern u1="ù" u2="P" k="20" /> +<hkern u1="ù" u2="O" k="18" /> +<hkern u1="ù" u2="N" k="20" /> +<hkern u1="ù" u2="M" k="20" /> +<hkern u1="ù" u2="L" k="20" /> +<hkern u1="ù" u2="K" k="20" /> +<hkern u1="ù" u2="I" k="20" /> +<hkern u1="ù" u2="H" k="20" /> +<hkern u1="ù" u2="G" k="18" /> +<hkern u1="ù" u2="F" k="20" /> +<hkern u1="ù" u2="E" k="20" /> +<hkern u1="ù" u2="D" k="20" /> +<hkern u1="ù" u2="C" k="18" /> +<hkern u1="ù" u2="B" k="20" /> +<hkern u1="ù" u2="A" k="12" /> +<hkern u1="ù" u2=")" k="37" /> +<hkern u1="ù" u2="&" k="14" /> +<hkern u1="ú" u2="™" k="37" /> +<hkern u1="ú" u2="Þ" k="20" /> +<hkern u1="ú" u2="Ý" k="143" /> +<hkern u1="ú" u2="Ü" k="37" /> +<hkern u1="ú" u2="Û" k="37" /> +<hkern u1="ú" u2="Ú" k="37" /> +<hkern u1="ú" u2="Ù" k="37" /> +<hkern u1="ú" u2="Ø" k="18" /> +<hkern u1="ú" u2="Ö" k="18" /> +<hkern u1="ú" u2="Õ" k="18" /> +<hkern u1="ú" u2="Ô" k="18" /> +<hkern u1="ú" u2="Ó" k="18" /> +<hkern u1="ú" u2="Ò" k="18" /> +<hkern u1="ú" u2="Ñ" k="20" /> +<hkern u1="ú" u2="Ð" k="20" /> +<hkern u1="ú" u2="Ï" k="20" /> +<hkern u1="ú" u2="Î" k="20" /> +<hkern u1="ú" u2="Í" k="20" /> +<hkern u1="ú" u2="Ì" k="20" /> +<hkern u1="ú" u2="Ë" k="20" /> +<hkern u1="ú" u2="Ê" k="20" /> +<hkern u1="ú" u2="É" k="20" /> +<hkern u1="ú" u2="È" k="20" /> +<hkern u1="ú" u2="Ç" k="18" /> +<hkern u1="ú" u2="Å" k="12" /> +<hkern u1="ú" u2="Ä" k="12" /> +<hkern u1="ú" u2="Ã" k="12" /> +<hkern u1="ú" u2="Â" k="12" /> +<hkern u1="ú" u2="Á" k="12" /> +<hkern u1="ú" u2="À" k="12" /> +<hkern u1="ú" u2="}" k="37" /> +<hkern u1="ú" u2="]" k="41" /> +<hkern u1="ú" u2="\" k="31" /> +<hkern u1="ú" u2="Y" k="143" /> +<hkern u1="ú" u2="X" k="16" /> +<hkern u1="ú" u2="V" k="90" /> +<hkern u1="ú" u2="U" k="37" /> +<hkern u1="ú" u2="T" k="137" /> +<hkern u1="ú" u2="S" k="16" /> +<hkern u1="ú" u2="R" k="20" /> +<hkern u1="ú" u2="Q" k="18" /> +<hkern u1="ú" u2="P" k="20" /> +<hkern u1="ú" u2="O" k="18" /> +<hkern u1="ú" u2="N" k="20" /> +<hkern u1="ú" u2="M" k="20" /> +<hkern u1="ú" u2="L" k="20" /> +<hkern u1="ú" u2="K" k="20" /> +<hkern u1="ú" u2="I" k="20" /> +<hkern u1="ú" u2="H" k="20" /> +<hkern u1="ú" u2="G" k="18" /> +<hkern u1="ú" u2="F" k="20" /> +<hkern u1="ú" u2="E" k="20" /> +<hkern u1="ú" u2="D" k="20" /> +<hkern u1="ú" u2="C" k="18" /> +<hkern u1="ú" u2="B" k="20" /> +<hkern u1="ú" u2="A" k="12" /> +<hkern u1="ú" u2=")" k="37" /> +<hkern u1="ú" u2="&" k="14" /> +<hkern u1="û" u2="™" k="37" /> +<hkern u1="û" u2="Þ" k="20" /> +<hkern u1="û" u2="Ý" k="143" /> +<hkern u1="û" u2="Ü" k="37" /> +<hkern u1="û" u2="Û" k="37" /> +<hkern u1="û" u2="Ú" k="37" /> +<hkern u1="û" u2="Ù" k="37" /> +<hkern u1="û" u2="Ø" k="18" /> +<hkern u1="û" u2="Ö" k="18" /> +<hkern u1="û" u2="Õ" k="18" /> +<hkern u1="û" u2="Ô" k="18" /> +<hkern u1="û" u2="Ó" k="18" /> +<hkern u1="û" u2="Ò" k="18" /> +<hkern u1="û" u2="Ñ" k="20" /> +<hkern u1="û" u2="Ð" k="20" /> +<hkern u1="û" u2="Ï" k="20" /> +<hkern u1="û" u2="Î" k="20" /> +<hkern u1="û" u2="Í" k="20" /> +<hkern u1="û" u2="Ì" k="20" /> +<hkern u1="û" u2="Ë" k="20" /> +<hkern u1="û" u2="Ê" k="20" /> +<hkern u1="û" u2="É" k="20" /> +<hkern u1="û" u2="È" k="20" /> +<hkern u1="û" u2="Ç" k="18" /> +<hkern u1="û" u2="Å" k="12" /> +<hkern u1="û" u2="Ä" k="12" /> +<hkern u1="û" u2="Ã" k="12" /> +<hkern u1="û" u2="Â" k="12" /> +<hkern u1="û" u2="Á" k="12" /> +<hkern u1="û" u2="À" k="12" /> +<hkern u1="û" u2="}" k="37" /> +<hkern u1="û" u2="]" k="41" /> +<hkern u1="û" u2="\" k="31" /> +<hkern u1="û" u2="Y" k="143" /> +<hkern u1="û" u2="X" k="16" /> +<hkern u1="û" u2="V" k="90" /> +<hkern u1="û" u2="U" k="37" /> +<hkern u1="û" u2="T" k="137" /> +<hkern u1="û" u2="S" k="16" /> +<hkern u1="û" u2="R" k="20" /> +<hkern u1="û" u2="Q" k="18" /> +<hkern u1="û" u2="P" k="20" /> +<hkern u1="û" u2="O" k="18" /> +<hkern u1="û" u2="N" k="20" /> +<hkern u1="û" u2="M" k="20" /> +<hkern u1="û" u2="L" k="20" /> +<hkern u1="û" u2="K" k="20" /> +<hkern u1="û" u2="I" k="20" /> +<hkern u1="û" u2="H" k="20" /> +<hkern u1="û" u2="G" k="18" /> +<hkern u1="û" u2="F" k="20" /> +<hkern u1="û" u2="E" k="20" /> +<hkern u1="û" u2="D" k="20" /> +<hkern u1="û" u2="C" k="18" /> +<hkern u1="û" u2="B" k="20" /> +<hkern u1="û" u2="A" k="12" /> +<hkern u1="û" u2=")" k="37" /> +<hkern u1="û" u2="&" k="14" /> +<hkern u1="ü" u2="™" k="37" /> +<hkern u1="ü" u2="Þ" k="20" /> +<hkern u1="ü" u2="Ý" k="143" /> +<hkern u1="ü" u2="Ü" k="37" /> +<hkern u1="ü" u2="Û" k="37" /> +<hkern u1="ü" u2="Ú" k="37" /> +<hkern u1="ü" u2="Ù" k="37" /> +<hkern u1="ü" u2="Ø" k="18" /> +<hkern u1="ü" u2="Ö" k="18" /> +<hkern u1="ü" u2="Õ" k="18" /> +<hkern u1="ü" u2="Ô" k="18" /> +<hkern u1="ü" u2="Ó" k="18" /> +<hkern u1="ü" u2="Ò" k="18" /> +<hkern u1="ü" u2="Ñ" k="20" /> +<hkern u1="ü" u2="Ð" k="20" /> +<hkern u1="ü" u2="Ï" k="20" /> +<hkern u1="ü" u2="Î" k="20" /> +<hkern u1="ü" u2="Í" k="20" /> +<hkern u1="ü" u2="Ì" k="20" /> +<hkern u1="ü" u2="Ë" k="20" /> +<hkern u1="ü" u2="Ê" k="20" /> +<hkern u1="ü" u2="É" k="20" /> +<hkern u1="ü" u2="È" k="20" /> +<hkern u1="ü" u2="Ç" k="18" /> +<hkern u1="ü" u2="Å" k="12" /> +<hkern u1="ü" u2="Ä" k="12" /> +<hkern u1="ü" u2="Ã" k="12" /> +<hkern u1="ü" u2="Â" k="12" /> +<hkern u1="ü" u2="Á" k="12" /> +<hkern u1="ü" u2="À" k="12" /> +<hkern u1="ü" u2="}" k="37" /> +<hkern u1="ü" u2="]" k="41" /> +<hkern u1="ü" u2="\" k="31" /> +<hkern u1="ü" u2="Y" k="143" /> +<hkern u1="ü" u2="X" k="16" /> +<hkern u1="ü" u2="V" k="90" /> +<hkern u1="ü" u2="U" k="37" /> +<hkern u1="ü" u2="T" k="137" /> +<hkern u1="ü" u2="S" k="16" /> +<hkern u1="ü" u2="R" k="20" /> +<hkern u1="ü" u2="Q" k="18" /> +<hkern u1="ü" u2="P" k="20" /> +<hkern u1="ü" u2="O" k="18" /> +<hkern u1="ü" u2="N" k="20" /> +<hkern u1="ü" u2="M" k="20" /> +<hkern u1="ü" u2="L" k="20" /> +<hkern u1="ü" u2="K" k="20" /> +<hkern u1="ü" u2="I" k="20" /> +<hkern u1="ü" u2="H" k="20" /> +<hkern u1="ü" u2="G" k="18" /> +<hkern u1="ü" u2="F" k="20" /> +<hkern u1="ü" u2="E" k="20" /> +<hkern u1="ü" u2="D" k="20" /> +<hkern u1="ü" u2="C" k="18" /> +<hkern u1="ü" u2="B" k="20" /> +<hkern u1="ü" u2="A" k="12" /> +<hkern u1="ü" u2=")" k="37" /> +<hkern u1="ü" u2="&" k="14" /> +<hkern u1="ý" u2="…" k="57" /> +<hkern u1="ý" u2="„" k="57" /> +<hkern u1="ý" u2="‚" k="57" /> +<hkern u1="ý" u2="ÿ" k="-59" /> +<hkern u1="ý" u2="ý" k="-59" /> +<hkern u1="ý" u2="ø" k="10" /> +<hkern u1="ý" u2="ö" k="10" /> +<hkern u1="ý" u2="õ" k="10" /> +<hkern u1="ý" u2="ô" k="10" /> +<hkern u1="ý" u2="ó" k="10" /> +<hkern u1="ý" u2="ò" k="10" /> +<hkern u1="ý" u2="ð" k="10" /> +<hkern u1="ý" u2="ë" k="10" /> +<hkern u1="ý" u2="ê" k="10" /> +<hkern u1="ý" u2="é" k="10" /> +<hkern u1="ý" u2="è" k="10" /> +<hkern u1="ý" u2="ç" k="10" /> +<hkern u1="ý" u2="æ" k="8" /> +<hkern u1="ý" u2="å" k="8" /> +<hkern u1="ý" u2="ä" k="8" /> +<hkern u1="ý" u2="ã" k="8" /> +<hkern u1="ý" u2="â" k="8" /> +<hkern u1="ý" u2="á" k="8" /> +<hkern u1="ý" u2="à" k="8" /> +<hkern u1="ý" u2="Þ" k="14" /> +<hkern u1="ý" u2="Ý" k="68" /> +<hkern u1="ý" u2="Ü" k="12" /> +<hkern u1="ý" u2="Û" k="12" /> +<hkern u1="ý" u2="Ú" k="12" /> +<hkern u1="ý" u2="Ù" k="12" /> +<hkern u1="ý" u2="Ñ" k="14" /> +<hkern u1="ý" u2="Ð" k="14" /> +<hkern u1="ý" u2="Ï" k="14" /> +<hkern u1="ý" u2="Î" k="14" /> +<hkern u1="ý" u2="Í" k="14" /> +<hkern u1="ý" u2="Ì" k="14" /> +<hkern u1="ý" u2="Ë" k="14" /> +<hkern u1="ý" u2="Ê" k="14" /> +<hkern u1="ý" u2="É" k="14" /> +<hkern u1="ý" u2="È" k="14" /> +<hkern u1="ý" u2="Å" k="70" /> +<hkern u1="ý" u2="Ä" k="70" /> +<hkern u1="ý" u2="Ã" k="70" /> +<hkern u1="ý" u2="Â" k="70" /> +<hkern u1="ý" u2="Á" k="70" /> +<hkern u1="ý" u2="À" k="70" /> +<hkern u1="ý" u2="}" k="27" /> +<hkern u1="ý" u2="y" k="-59" /> +<hkern u1="ý" u2="x" k="-57" /> +<hkern u1="ý" u2="v" k="-63" /> +<hkern u1="ý" u2="t" k="-45" /> +<hkern u1="ý" u2="q" k="10" /> +<hkern u1="ý" u2="o" k="10" /> +<hkern u1="ý" u2="g" k="10" /> +<hkern u1="ý" u2="e" k="10" /> +<hkern u1="ý" u2="d" k="10" /> +<hkern u1="ý" u2="c" k="10" /> +<hkern u1="ý" u2="a" k="8" /> +<hkern u1="ý" u2="]" k="37" /> +<hkern u1="ý" u2="Y" k="68" /> +<hkern u1="ý" u2="X" k="74" /> +<hkern u1="ý" u2="V" k="20" /> +<hkern u1="ý" u2="U" k="12" /> +<hkern u1="ý" u2="T" k="98" /> +<hkern u1="ý" u2="R" k="14" /> +<hkern u1="ý" u2="P" k="14" /> +<hkern u1="ý" u2="N" k="14" /> +<hkern u1="ý" u2="M" k="14" /> +<hkern u1="ý" u2="L" k="14" /> +<hkern u1="ý" u2="K" k="14" /> +<hkern u1="ý" u2="I" k="14" /> +<hkern u1="ý" u2="H" k="14" /> +<hkern u1="ý" u2="F" k="14" /> +<hkern u1="ý" u2="E" k="14" /> +<hkern u1="ý" u2="D" k="14" /> +<hkern u1="ý" u2="B" k="14" /> +<hkern u1="ý" u2="A" k="70" /> +<hkern u1="ý" u2="/" k="31" /> +<hkern u1="ý" u2="." k="57" /> +<hkern u1="ý" u2="," k="57" /> +<hkern u1="ý" u2=")" k="35" /> +<hkern u1="ý" u2="&" k="25" /> +<hkern u1="þ" u2="ffl" k="10" /> +<hkern u1="þ" u2="ffi" k="10" /> +<hkern u1="þ" u2="fl" k="10" /> +<hkern u1="þ" u2="fi" k="10" /> +<hkern u1="þ" u2="™" k="47" /> +<hkern u1="þ" u2="”" k="33" /> +<hkern u1="þ" u2="“" k="31" /> +<hkern u1="þ" u2="’" k="33" /> +<hkern u1="þ" u2="‘" k="31" /> +<hkern u1="þ" u2="ÿ" k="10" /> +<hkern u1="þ" u2="ý" k="10" /> +<hkern u1="þ" u2="ß" k="10" /> +<hkern u1="þ" u2="Þ" k="29" /> +<hkern u1="þ" u2="Ý" k="178" /> +<hkern u1="þ" u2="Ü" k="31" /> +<hkern u1="þ" u2="Û" k="31" /> +<hkern u1="þ" u2="Ú" k="31" /> +<hkern u1="þ" u2="Ù" k="31" /> +<hkern u1="þ" u2="Ø" k="12" /> +<hkern u1="þ" u2="Ö" k="12" /> +<hkern u1="þ" u2="Õ" k="12" /> +<hkern u1="þ" u2="Ô" k="12" /> +<hkern u1="þ" u2="Ó" k="12" /> +<hkern u1="þ" u2="Ò" k="12" /> +<hkern u1="þ" u2="Ñ" k="29" /> +<hkern u1="þ" u2="Ð" k="29" /> +<hkern u1="þ" u2="Ï" k="29" /> +<hkern u1="þ" u2="Î" k="29" /> +<hkern u1="þ" u2="Í" k="29" /> +<hkern u1="þ" u2="Ì" k="29" /> +<hkern u1="þ" u2="Ë" k="29" /> +<hkern u1="þ" u2="Ê" k="29" /> +<hkern u1="þ" u2="É" k="29" /> +<hkern u1="þ" u2="È" k="29" /> +<hkern u1="þ" u2="Ç" k="12" /> +<hkern u1="þ" u2="Å" k="25" /> +<hkern u1="þ" u2="Ä" k="25" /> +<hkern u1="þ" u2="Ã" k="25" /> +<hkern u1="þ" u2="Â" k="25" /> +<hkern u1="þ" u2="Á" k="25" /> +<hkern u1="þ" u2="À" k="25" /> +<hkern u1="þ" u2="}" k="47" /> +<hkern u1="þ" u2="y" k="10" /> +<hkern u1="þ" u2="x" k="31" /> +<hkern u1="þ" u2="v" k="14" /> +<hkern u1="þ" u2="t" k="8" /> +<hkern u1="þ" u2="f" k="10" /> +<hkern u1="þ" u2="]" k="51" /> +<hkern u1="þ" u2="\" k="45" /> +<hkern u1="þ" u2="Y" k="178" /> +<hkern u1="þ" u2="X" k="84" /> +<hkern u1="þ" u2="V" k="109" /> +<hkern u1="þ" u2="U" k="31" /> +<hkern u1="þ" u2="T" k="176" /> +<hkern u1="þ" u2="S" k="29" /> +<hkern u1="þ" u2="R" k="29" /> +<hkern u1="þ" u2="Q" k="12" /> +<hkern u1="þ" u2="P" k="29" /> +<hkern u1="þ" u2="O" k="12" /> +<hkern u1="þ" u2="N" k="29" /> +<hkern u1="þ" u2="M" k="29" /> +<hkern u1="þ" u2="L" k="29" /> +<hkern u1="þ" u2="K" k="29" /> +<hkern u1="þ" u2="I" k="29" /> +<hkern u1="þ" u2="H" k="29" /> +<hkern u1="þ" u2="G" k="12" /> +<hkern u1="þ" u2="F" k="29" /> +<hkern u1="þ" u2="E" k="29" /> +<hkern u1="þ" u2="D" k="29" /> +<hkern u1="þ" u2="C" k="12" /> +<hkern u1="þ" u2="B" k="29" /> +<hkern u1="þ" u2="A" k="25" /> +<hkern u1="þ" u2="?" k="41" /> +<hkern u1="þ" u2="*" k="29" /> +<hkern u1="þ" u2=")" k="55" /> +<hkern u1="þ" u2="'" k="33" /> +<hkern u1="þ" u2=""" k="33" /> +<hkern u1="ÿ" u2="…" k="57" /> +<hkern u1="ÿ" u2="„" k="57" /> +<hkern u1="ÿ" u2="‚" k="57" /> +<hkern u1="ÿ" u2="ÿ" k="-59" /> +<hkern u1="ÿ" u2="ý" k="-59" /> +<hkern u1="ÿ" u2="ø" k="10" /> +<hkern u1="ÿ" u2="ö" k="10" /> +<hkern u1="ÿ" u2="õ" k="10" /> +<hkern u1="ÿ" u2="ô" k="10" /> +<hkern u1="ÿ" u2="ó" k="10" /> +<hkern u1="ÿ" u2="ò" k="10" /> +<hkern u1="ÿ" u2="ð" k="10" /> +<hkern u1="ÿ" u2="ë" k="10" /> +<hkern u1="ÿ" u2="ê" k="10" /> +<hkern u1="ÿ" u2="é" k="10" /> +<hkern u1="ÿ" u2="è" k="10" /> +<hkern u1="ÿ" u2="ç" k="10" /> +<hkern u1="ÿ" u2="æ" k="8" /> +<hkern u1="ÿ" u2="å" k="8" /> +<hkern u1="ÿ" u2="ä" k="8" /> +<hkern u1="ÿ" u2="ã" k="8" /> +<hkern u1="ÿ" u2="â" k="8" /> +<hkern u1="ÿ" u2="á" k="8" /> +<hkern u1="ÿ" u2="à" k="8" /> +<hkern u1="ÿ" u2="Þ" k="14" /> +<hkern u1="ÿ" u2="Ý" k="68" /> +<hkern u1="ÿ" u2="Ü" k="12" /> +<hkern u1="ÿ" u2="Û" k="12" /> +<hkern u1="ÿ" u2="Ú" k="12" /> +<hkern u1="ÿ" u2="Ù" k="12" /> +<hkern u1="ÿ" u2="Ñ" k="14" /> +<hkern u1="ÿ" u2="Ð" k="14" /> +<hkern u1="ÿ" u2="Ï" k="14" /> +<hkern u1="ÿ" u2="Î" k="14" /> +<hkern u1="ÿ" u2="Í" k="14" /> +<hkern u1="ÿ" u2="Ì" k="14" /> +<hkern u1="ÿ" u2="Ë" k="14" /> +<hkern u1="ÿ" u2="Ê" k="14" /> +<hkern u1="ÿ" u2="É" k="14" /> +<hkern u1="ÿ" u2="È" k="14" /> +<hkern u1="ÿ" u2="Å" k="70" /> +<hkern u1="ÿ" u2="Ä" k="70" /> +<hkern u1="ÿ" u2="Ã" k="70" /> +<hkern u1="ÿ" u2="Â" k="70" /> +<hkern u1="ÿ" u2="Á" k="70" /> +<hkern u1="ÿ" u2="À" k="70" /> +<hkern u1="ÿ" u2="}" k="27" /> +<hkern u1="ÿ" u2="y" k="-59" /> +<hkern u1="ÿ" u2="x" k="-57" /> +<hkern u1="ÿ" u2="v" k="-63" /> +<hkern u1="ÿ" u2="t" k="-45" /> +<hkern u1="ÿ" u2="q" k="10" /> +<hkern u1="ÿ" u2="o" k="10" /> +<hkern u1="ÿ" u2="g" k="10" /> +<hkern u1="ÿ" u2="e" k="10" /> +<hkern u1="ÿ" u2="d" k="10" /> +<hkern u1="ÿ" u2="c" k="10" /> +<hkern u1="ÿ" u2="a" k="8" /> +<hkern u1="ÿ" u2="]" k="37" /> +<hkern u1="ÿ" u2="Y" k="68" /> +<hkern u1="ÿ" u2="X" k="74" /> +<hkern u1="ÿ" u2="V" k="20" /> +<hkern u1="ÿ" u2="U" k="12" /> +<hkern u1="ÿ" u2="T" k="98" /> +<hkern u1="ÿ" u2="R" k="14" /> +<hkern u1="ÿ" u2="P" k="14" /> +<hkern u1="ÿ" u2="N" k="14" /> +<hkern u1="ÿ" u2="M" k="14" /> +<hkern u1="ÿ" u2="L" k="14" /> +<hkern u1="ÿ" u2="K" k="14" /> +<hkern u1="ÿ" u2="I" k="14" /> +<hkern u1="ÿ" u2="H" k="14" /> +<hkern u1="ÿ" u2="F" k="14" /> +<hkern u1="ÿ" u2="E" k="14" /> +<hkern u1="ÿ" u2="D" k="14" /> +<hkern u1="ÿ" u2="B" k="14" /> +<hkern u1="ÿ" u2="A" k="70" /> +<hkern u1="ÿ" u2="/" k="31" /> +<hkern u1="ÿ" u2="." k="57" /> +<hkern u1="ÿ" u2="," k="57" /> +<hkern u1="ÿ" u2=")" k="35" /> +<hkern u1="ÿ" u2="&" k="25" /> +<hkern u1="–" u2="ffl" k="27" /> +<hkern u1="–" u2="ffi" k="27" /> +<hkern u1="–" u2="fl" k="27" /> +<hkern u1="–" u2="fi" k="27" /> +<hkern u1="–" u2="ß" k="27" /> +<hkern u1="–" u2="Ý" k="135" /> +<hkern u1="–" u2="Å" k="29" /> +<hkern u1="–" u2="Ä" k="29" /> +<hkern u1="–" u2="Ã" k="29" /> +<hkern u1="–" u2="Â" k="29" /> +<hkern u1="–" u2="Á" k="29" /> +<hkern u1="–" u2="À" k="29" /> +<hkern u1="–" u2="x" k="45" /> +<hkern u1="–" u2="v" k="16" /> +<hkern u1="–" u2="t" k="25" /> +<hkern u1="–" u2="f" k="27" /> +<hkern u1="–" u2="Y" k="135" /> +<hkern u1="–" u2="X" k="63" /> +<hkern u1="–" u2="V" k="68" /> +<hkern u1="–" u2="T" k="131" /> +<hkern u1="–" u2="S" k="39" /> +<hkern u1="–" u2="A" k="29" /> +<hkern u1="—" u2="ffl" k="27" /> +<hkern u1="—" u2="ffi" k="27" /> +<hkern u1="—" u2="fl" k="27" /> +<hkern u1="—" u2="fi" k="27" /> +<hkern u1="—" u2="ß" k="27" /> +<hkern u1="—" u2="Ý" k="135" /> +<hkern u1="—" u2="Å" k="29" /> +<hkern u1="—" u2="Ä" k="29" /> +<hkern u1="—" u2="Ã" k="29" /> +<hkern u1="—" u2="Â" k="29" /> +<hkern u1="—" u2="Á" k="29" /> +<hkern u1="—" u2="À" k="29" /> +<hkern u1="—" u2="x" k="45" /> +<hkern u1="—" u2="v" k="16" /> +<hkern u1="—" u2="t" k="25" /> +<hkern u1="—" u2="f" k="27" /> +<hkern u1="—" u2="Y" k="135" /> +<hkern u1="—" u2="X" k="63" /> +<hkern u1="—" u2="V" k="68" /> +<hkern u1="—" u2="T" k="131" /> +<hkern u1="—" u2="S" k="39" /> +<hkern u1="—" u2="A" k="29" /> +<hkern u1="‘" u2="…" k="254" /> +<hkern u1="‘" u2="„" k="254" /> +<hkern u1="‘" u2="‚" k="254" /> +<hkern u1="‘" u2="ø" k="31" /> +<hkern u1="‘" u2="ö" k="31" /> +<hkern u1="‘" u2="õ" k="31" /> +<hkern u1="‘" u2="ô" k="31" /> +<hkern u1="‘" u2="ó" k="31" /> +<hkern u1="‘" u2="ò" k="31" /> +<hkern u1="‘" u2="ð" k="31" /> +<hkern u1="‘" u2="ë" k="31" /> +<hkern u1="‘" u2="ê" k="31" /> +<hkern u1="‘" u2="é" k="31" /> +<hkern u1="‘" u2="è" k="31" /> +<hkern u1="‘" u2="ç" k="31" /> +<hkern u1="‘" u2="Æ" k="117" /> +<hkern u1="‘" u2="Å" k="92" /> +<hkern u1="‘" u2="Ä" k="92" /> +<hkern u1="‘" u2="Ã" k="92" /> +<hkern u1="‘" u2="Â" k="92" /> +<hkern u1="‘" u2="Á" k="92" /> +<hkern u1="‘" u2="À" k="92" /> +<hkern u1="‘" u2="q" k="31" /> +<hkern u1="‘" u2="o" k="31" /> +<hkern u1="‘" u2="g" k="31" /> +<hkern u1="‘" u2="e" k="31" /> +<hkern u1="‘" u2="d" k="31" /> +<hkern u1="‘" u2="c" k="31" /> +<hkern u1="‘" u2="A" k="92" /> +<hkern u1="‘" u2="." k="254" /> +<hkern u1="‘" u2="," k="254" /> +<hkern u1="’" u2="‹" k="70" /> +<hkern u1="’" u2="…" k="244" /> +<hkern u1="’" u2="„" k="244" /> +<hkern u1="’" u2="‚" k="244" /> +<hkern u1="’" u2="ø" k="57" /> +<hkern u1="’" u2="ö" k="57" /> +<hkern u1="’" u2="õ" k="57" /> +<hkern u1="’" u2="ô" k="57" /> +<hkern u1="’" u2="ó" k="57" /> +<hkern u1="’" u2="ò" k="57" /> +<hkern u1="’" u2="ð" k="57" /> +<hkern u1="’" u2="ë" k="57" /> +<hkern u1="’" u2="ê" k="57" /> +<hkern u1="’" u2="é" k="57" /> +<hkern u1="’" u2="è" k="57" /> +<hkern u1="’" u2="ç" k="57" /> +<hkern u1="’" u2="æ" k="29" /> +<hkern u1="’" u2="å" k="29" /> +<hkern u1="’" u2="ä" k="29" /> +<hkern u1="’" u2="ã" k="29" /> +<hkern u1="’" u2="â" k="29" /> +<hkern u1="’" u2="á" k="29" /> +<hkern u1="’" u2="à" k="29" /> +<hkern u1="’" u2="Æ" k="131" /> +<hkern u1="’" u2="Å" k="104" /> +<hkern u1="’" u2="Ä" k="104" /> +<hkern u1="’" u2="Ã" k="104" /> +<hkern u1="’" u2="Â" k="104" /> +<hkern u1="’" u2="Á" k="104" /> +<hkern u1="’" u2="À" k="104" /> +<hkern u1="’" u2="«" k="70" /> +<hkern u1="’" u2="s" k="33" /> +<hkern u1="’" u2="q" k="57" /> +<hkern u1="’" u2="o" k="57" /> +<hkern u1="’" u2="g" k="57" /> +<hkern u1="’" u2="e" k="57" /> +<hkern u1="’" u2="d" k="57" /> +<hkern u1="’" u2="c" k="57" /> +<hkern u1="’" u2="a" k="29" /> +<hkern u1="’" u2="A" k="104" /> +<hkern u1="’" u2="@" k="41" /> +<hkern u1="’" u2="/" k="88" /> +<hkern u1="’" u2="." k="244" /> +<hkern u1="’" u2="," k="244" /> +<hkern u1="‚" u2="ffl" k="20" /> +<hkern u1="‚" u2="ffi" k="20" /> +<hkern u1="‚" u2="fl" k="20" /> +<hkern u1="‚" u2="fi" k="20" /> +<hkern u1="‚" u2="”" k="256" /> +<hkern u1="‚" u2="“" k="254" /> +<hkern u1="‚" u2="’" k="244" /> +<hkern u1="‚" u2="‘" k="254" /> +<hkern u1="‚" u2="ÿ" k="57" /> +<hkern u1="‚" u2="ý" k="57" /> +<hkern u1="‚" u2="ß" k="20" /> +<hkern u1="‚" u2="Ý" k="154" /> +<hkern u1="‚" u2="Ü" k="37" /> +<hkern u1="‚" u2="Û" k="37" /> +<hkern u1="‚" u2="Ú" k="37" /> +<hkern u1="‚" u2="Ù" k="37" /> +<hkern u1="‚" u2="Ø" k="39" /> +<hkern u1="‚" u2="Ö" k="39" /> +<hkern u1="‚" u2="Õ" k="39" /> +<hkern u1="‚" u2="Ô" k="39" /> +<hkern u1="‚" u2="Ó" k="39" /> +<hkern u1="‚" u2="Ò" k="39" /> +<hkern u1="‚" u2="Ç" k="39" /> +<hkern u1="‚" u2="y" k="57" /> +<hkern u1="‚" u2="v" k="63" /> +<hkern u1="‚" u2="t" k="25" /> +<hkern u1="‚" u2="f" k="20" /> +<hkern u1="‚" u2="Y" k="154" /> +<hkern u1="‚" u2="V" k="131" /> +<hkern u1="‚" u2="U" k="37" /> +<hkern u1="‚" u2="T" k="131" /> +<hkern u1="‚" u2="Q" k="39" /> +<hkern u1="‚" u2="O" k="39" /> +<hkern u1="‚" u2="G" k="39" /> +<hkern u1="‚" u2="C" k="39" /> +<hkern u1="‚" u2="'" k="244" /> +<hkern u1="‚" u2=""" k="256" /> +<hkern u1="“" u2="…" k="254" /> +<hkern u1="“" u2="„" k="254" /> +<hkern u1="“" u2="‚" k="254" /> +<hkern u1="“" u2="ø" k="31" /> +<hkern u1="“" u2="ö" k="31" /> +<hkern u1="“" u2="õ" k="31" /> +<hkern u1="“" u2="ô" k="31" /> +<hkern u1="“" u2="ó" k="31" /> +<hkern u1="“" u2="ò" k="31" /> +<hkern u1="“" u2="ð" k="31" /> +<hkern u1="“" u2="ë" k="31" /> +<hkern u1="“" u2="ê" k="31" /> +<hkern u1="“" u2="é" k="31" /> +<hkern u1="“" u2="è" k="31" /> +<hkern u1="“" u2="ç" k="31" /> +<hkern u1="“" u2="Æ" k="117" /> +<hkern u1="“" u2="Å" k="92" /> +<hkern u1="“" u2="Ä" k="92" /> +<hkern u1="“" u2="Ã" k="92" /> +<hkern u1="“" u2="Â" k="92" /> +<hkern u1="“" u2="Á" k="92" /> +<hkern u1="“" u2="À" k="92" /> +<hkern u1="“" u2="q" k="31" /> +<hkern u1="“" u2="o" k="31" /> +<hkern u1="“" u2="g" k="31" /> +<hkern u1="“" u2="e" k="31" /> +<hkern u1="“" u2="d" k="31" /> +<hkern u1="“" u2="c" k="31" /> +<hkern u1="“" u2="A" k="92" /> +<hkern u1="“" u2="." k="254" /> +<hkern u1="“" u2="," k="254" /> +<hkern u1="”" u2="‹" k="70" /> +<hkern u1="”" u2="…" k="266" /> +<hkern u1="”" u2="„" k="266" /> +<hkern u1="”" u2="‚" k="266" /> +<hkern u1="”" u2="ø" k="57" /> +<hkern u1="”" u2="ö" k="57" /> +<hkern u1="”" u2="õ" k="57" /> +<hkern u1="”" u2="ô" k="57" /> +<hkern u1="”" u2="ó" k="57" /> +<hkern u1="”" u2="ò" k="57" /> +<hkern u1="”" u2="ð" k="57" /> +<hkern u1="”" u2="ë" k="57" /> +<hkern u1="”" u2="ê" k="57" /> +<hkern u1="”" u2="é" k="57" /> +<hkern u1="”" u2="è" k="57" /> +<hkern u1="”" u2="ç" k="57" /> +<hkern u1="”" u2="æ" k="29" /> +<hkern u1="”" u2="å" k="29" /> +<hkern u1="”" u2="ä" k="29" /> +<hkern u1="”" u2="ã" k="29" /> +<hkern u1="”" u2="â" k="29" /> +<hkern u1="”" u2="á" k="29" /> +<hkern u1="”" u2="à" k="29" /> +<hkern u1="”" u2="Æ" k="131" /> +<hkern u1="”" u2="Å" k="104" /> +<hkern u1="”" u2="Ä" k="104" /> +<hkern u1="”" u2="Ã" k="104" /> +<hkern u1="”" u2="Â" k="104" /> +<hkern u1="”" u2="Á" k="104" /> +<hkern u1="”" u2="À" k="104" /> +<hkern u1="”" u2="«" k="70" /> +<hkern u1="”" u2="s" k="33" /> +<hkern u1="”" u2="q" k="57" /> +<hkern u1="”" u2="o" k="57" /> +<hkern u1="”" u2="g" k="57" /> +<hkern u1="”" u2="e" k="57" /> +<hkern u1="”" u2="d" k="57" /> +<hkern u1="”" u2="c" k="57" /> +<hkern u1="”" u2="a" k="29" /> +<hkern u1="”" u2="A" k="104" /> +<hkern u1="”" u2="@" k="41" /> +<hkern u1="”" u2="/" k="88" /> +<hkern u1="”" u2="." k="266" /> +<hkern u1="”" u2="," k="266" /> +<hkern u1="„" u2="ffl" k="20" /> +<hkern u1="„" u2="ffi" k="20" /> +<hkern u1="„" u2="fl" k="20" /> +<hkern u1="„" u2="fi" k="20" /> +<hkern u1="„" u2="”" k="256" /> +<hkern u1="„" u2="“" k="254" /> +<hkern u1="„" u2="’" k="244" /> +<hkern u1="„" u2="‘" k="254" /> +<hkern u1="„" u2="ÿ" k="57" /> +<hkern u1="„" u2="ý" k="57" /> +<hkern u1="„" u2="ß" k="20" /> +<hkern u1="„" u2="Ý" k="154" /> +<hkern u1="„" u2="Ü" k="37" /> +<hkern u1="„" u2="Û" k="37" /> +<hkern u1="„" u2="Ú" k="37" /> +<hkern u1="„" u2="Ù" k="37" /> +<hkern u1="„" u2="Ø" k="39" /> +<hkern u1="„" u2="Ö" k="39" /> +<hkern u1="„" u2="Õ" k="39" /> +<hkern u1="„" u2="Ô" k="39" /> +<hkern u1="„" u2="Ó" k="39" /> +<hkern u1="„" u2="Ò" k="39" /> +<hkern u1="„" u2="Ç" k="39" /> +<hkern u1="„" u2="y" k="57" /> +<hkern u1="„" u2="v" k="63" /> +<hkern u1="„" u2="t" k="25" /> +<hkern u1="„" u2="f" k="20" /> +<hkern u1="„" u2="Y" k="154" /> +<hkern u1="„" u2="V" k="131" /> +<hkern u1="„" u2="U" k="37" /> +<hkern u1="„" u2="T" k="131" /> +<hkern u1="„" u2="Q" k="39" /> +<hkern u1="„" u2="O" k="39" /> +<hkern u1="„" u2="G" k="39" /> +<hkern u1="„" u2="C" k="39" /> +<hkern u1="„" u2="'" k="244" /> +<hkern u1="„" u2=""" k="256" /> +<hkern u1="‹" u2="Ý" k="66" /> +<hkern u1="‹" u2="Y" k="66" /> +<hkern u1="‹" u2="V" k="25" /> +<hkern u1="‹" u2="T" k="104" /> +<hkern u1="›" u2="”" k="45" /> +<hkern u1="›" u2="’" k="45" /> +<hkern u1="›" u2="Ý" k="121" /> +<hkern u1="›" u2="x" k="27" /> +<hkern u1="›" u2="Y" k="121" /> +<hkern u1="›" u2="X" k="31" /> +<hkern u1="›" u2="V" k="63" /> +<hkern u1="›" u2="T" k="121" /> +<hkern u1="›" u2="'" k="45" /> +<hkern u1="›" u2=""" k="45" /> +<hkern u1="™" u2="Æ" k="61" /> +<hkern u1="™" u2="Å" k="61" /> +<hkern u1="™" u2="Ä" k="61" /> +<hkern u1="™" u2="Ã" k="61" /> +<hkern u1="™" u2="Â" k="61" /> +<hkern u1="™" u2="Á" k="61" /> +<hkern u1="™" u2="À" k="61" /> +<hkern u1="™" u2="A" k="61" /> +<hkern u1="fi" u2="Þ" k="20" /> +<hkern u1="fi" u2="Ý" k="16" /> +<hkern u1="fi" u2="Ü" k="31" /> +<hkern u1="fi" u2="Û" k="31" /> +<hkern u1="fi" u2="Ú" k="31" /> +<hkern u1="fi" u2="Ù" k="31" /> +<hkern u1="fi" u2="Ø" k="20" /> +<hkern u1="fi" u2="Ö" k="20" /> +<hkern u1="fi" u2="Õ" k="20" /> +<hkern u1="fi" u2="Ô" k="20" /> +<hkern u1="fi" u2="Ó" k="20" /> +<hkern u1="fi" u2="Ò" k="20" /> +<hkern u1="fi" u2="Ñ" k="20" /> +<hkern u1="fi" u2="Ð" k="20" /> +<hkern u1="fi" u2="Ï" k="20" /> +<hkern u1="fi" u2="Î" k="20" /> +<hkern u1="fi" u2="Í" k="20" /> +<hkern u1="fi" u2="Ì" k="20" /> +<hkern u1="fi" u2="Ë" k="20" /> +<hkern u1="fi" u2="Ê" k="20" /> +<hkern u1="fi" u2="É" k="20" /> +<hkern u1="fi" u2="È" k="20" /> +<hkern u1="fi" u2="Ç" k="20" /> +<hkern u1="fi" u2="Å" k="14" /> +<hkern u1="fi" u2="Ä" k="14" /> +<hkern u1="fi" u2="Ã" k="14" /> +<hkern u1="fi" u2="Â" k="14" /> +<hkern u1="fi" u2="Á" k="14" /> +<hkern u1="fi" u2="À" k="14" /> +<hkern u1="fi" u2="Y" k="16" /> +<hkern u1="fi" u2="V" k="18" /> +<hkern u1="fi" u2="U" k="31" /> +<hkern u1="fi" u2="T" k="20" /> +<hkern u1="fi" u2="S" k="18" /> +<hkern u1="fi" u2="R" k="20" /> +<hkern u1="fi" u2="Q" k="20" /> +<hkern u1="fi" u2="P" k="20" /> +<hkern u1="fi" u2="O" k="20" /> +<hkern u1="fi" u2="N" k="20" /> +<hkern u1="fi" u2="M" k="20" /> +<hkern u1="fi" u2="L" k="20" /> +<hkern u1="fi" u2="K" k="20" /> +<hkern u1="fi" u2="I" k="20" /> +<hkern u1="fi" u2="H" k="20" /> +<hkern u1="fi" u2="G" k="20" /> +<hkern u1="fi" u2="F" k="20" /> +<hkern u1="fi" u2="E" k="20" /> +<hkern u1="fi" u2="D" k="20" /> +<hkern u1="fi" u2="C" k="20" /> +<hkern u1="fi" u2="B" k="20" /> +<hkern u1="fi" u2="A" k="14" /> +<hkern u1="fi" u2="&" k="16" /> +<hkern u1="fl" u2="Þ" k="20" /> +<hkern u1="fl" u2="Ý" k="23" /> +<hkern u1="fl" u2="Ü" k="37" /> +<hkern u1="fl" u2="Û" k="37" /> +<hkern u1="fl" u2="Ú" k="37" /> +<hkern u1="fl" u2="Ù" k="37" /> +<hkern u1="fl" u2="Ø" k="23" /> +<hkern u1="fl" u2="Ö" k="23" /> +<hkern u1="fl" u2="Õ" k="23" /> +<hkern u1="fl" u2="Ô" k="23" /> +<hkern u1="fl" u2="Ó" k="23" /> +<hkern u1="fl" u2="Ò" k="23" /> +<hkern u1="fl" u2="Ñ" k="20" /> +<hkern u1="fl" u2="Ð" k="20" /> +<hkern u1="fl" u2="Ï" k="20" /> +<hkern u1="fl" u2="Î" k="20" /> +<hkern u1="fl" u2="Í" k="20" /> +<hkern u1="fl" u2="Ì" k="20" /> +<hkern u1="fl" u2="Ë" k="20" /> +<hkern u1="fl" u2="Ê" k="20" /> +<hkern u1="fl" u2="É" k="20" /> +<hkern u1="fl" u2="È" k="20" /> +<hkern u1="fl" u2="Ç" k="23" /> +<hkern u1="fl" u2="Å" k="16" /> +<hkern u1="fl" u2="Ä" k="16" /> +<hkern u1="fl" u2="Ã" k="16" /> +<hkern u1="fl" u2="Â" k="16" /> +<hkern u1="fl" u2="Á" k="16" /> +<hkern u1="fl" u2="À" k="16" /> +<hkern u1="fl" u2="·" k="123" /> +<hkern u1="fl" u2="Y" k="23" /> +<hkern u1="fl" u2="V" k="23" /> +<hkern u1="fl" u2="U" k="37" /> +<hkern u1="fl" u2="T" k="18" /> +<hkern u1="fl" u2="S" k="18" /> +<hkern u1="fl" u2="R" k="20" /> +<hkern u1="fl" u2="Q" k="23" /> +<hkern u1="fl" u2="P" k="20" /> +<hkern u1="fl" u2="O" k="23" /> +<hkern u1="fl" u2="N" k="20" /> +<hkern u1="fl" u2="M" k="20" /> +<hkern u1="fl" u2="L" k="20" /> +<hkern u1="fl" u2="K" k="20" /> +<hkern u1="fl" u2="I" k="20" /> +<hkern u1="fl" u2="H" k="20" /> +<hkern u1="fl" u2="G" k="23" /> +<hkern u1="fl" u2="F" k="20" /> +<hkern u1="fl" u2="E" k="20" /> +<hkern u1="fl" u2="D" k="20" /> +<hkern u1="fl" u2="C" k="23" /> +<hkern u1="fl" u2="B" k="20" /> +<hkern u1="fl" u2="A" k="16" /> +<hkern u1="fl" u2="&" k="18" /> +<hkern u1="ffi" u2="Þ" k="20" /> +<hkern u1="ffi" u2="Ý" k="16" /> +<hkern u1="ffi" u2="Ü" k="31" /> +<hkern u1="ffi" u2="Û" k="31" /> +<hkern u1="ffi" u2="Ú" k="31" /> +<hkern u1="ffi" u2="Ù" k="31" /> +<hkern u1="ffi" u2="Ø" k="20" /> +<hkern u1="ffi" u2="Ö" k="20" /> +<hkern u1="ffi" u2="Õ" k="20" /> +<hkern u1="ffi" u2="Ô" k="20" /> +<hkern u1="ffi" u2="Ó" k="20" /> +<hkern u1="ffi" u2="Ò" k="20" /> +<hkern u1="ffi" u2="Ñ" k="20" /> +<hkern u1="ffi" u2="Ð" k="20" /> +<hkern u1="ffi" u2="Ï" k="20" /> +<hkern u1="ffi" u2="Î" k="20" /> +<hkern u1="ffi" u2="Í" k="20" /> +<hkern u1="ffi" u2="Ì" k="20" /> +<hkern u1="ffi" u2="Ë" k="20" /> +<hkern u1="ffi" u2="Ê" k="20" /> +<hkern u1="ffi" u2="É" k="20" /> +<hkern u1="ffi" u2="È" k="20" /> +<hkern u1="ffi" u2="Ç" k="20" /> +<hkern u1="ffi" u2="Å" k="14" /> +<hkern u1="ffi" u2="Ä" k="14" /> +<hkern u1="ffi" u2="Ã" k="14" /> +<hkern u1="ffi" u2="Â" k="14" /> +<hkern u1="ffi" u2="Á" k="14" /> +<hkern u1="ffi" u2="À" k="14" /> +<hkern u1="ffi" u2="Y" k="16" /> +<hkern u1="ffi" u2="V" k="18" /> +<hkern u1="ffi" u2="U" k="31" /> +<hkern u1="ffi" u2="T" k="20" /> +<hkern u1="ffi" u2="S" k="18" /> +<hkern u1="ffi" u2="R" k="20" /> +<hkern u1="ffi" u2="Q" k="20" /> +<hkern u1="ffi" u2="P" k="20" /> +<hkern u1="ffi" u2="O" k="20" /> +<hkern u1="ffi" u2="N" k="20" /> +<hkern u1="ffi" u2="M" k="20" /> +<hkern u1="ffi" u2="L" k="20" /> +<hkern u1="ffi" u2="K" k="20" /> +<hkern u1="ffi" u2="I" k="20" /> +<hkern u1="ffi" u2="H" k="20" /> +<hkern u1="ffi" u2="G" k="20" /> +<hkern u1="ffi" u2="F" k="20" /> +<hkern u1="ffi" u2="E" k="20" /> +<hkern u1="ffi" u2="D" k="20" /> +<hkern u1="ffi" u2="C" k="20" /> +<hkern u1="ffi" u2="B" k="20" /> +<hkern u1="ffi" u2="A" k="14" /> +<hkern u1="ffi" u2="&" k="16" /> +<hkern u1="ffl" u2="Þ" k="20" /> +<hkern u1="ffl" u2="Ý" k="23" /> +<hkern u1="ffl" u2="Ü" k="37" /> +<hkern u1="ffl" u2="Û" k="37" /> +<hkern u1="ffl" u2="Ú" k="37" /> +<hkern u1="ffl" u2="Ù" k="37" /> +<hkern u1="ffl" u2="Ø" k="23" /> +<hkern u1="ffl" u2="Ö" k="23" /> +<hkern u1="ffl" u2="Õ" k="23" /> +<hkern u1="ffl" u2="Ô" k="23" /> +<hkern u1="ffl" u2="Ó" k="23" /> +<hkern u1="ffl" u2="Ò" k="23" /> +<hkern u1="ffl" u2="Ñ" k="20" /> +<hkern u1="ffl" u2="Ð" k="20" /> +<hkern u1="ffl" u2="Ï" k="20" /> +<hkern u1="ffl" u2="Î" k="20" /> +<hkern u1="ffl" u2="Í" k="20" /> +<hkern u1="ffl" u2="Ì" k="20" /> +<hkern u1="ffl" u2="Ë" k="20" /> +<hkern u1="ffl" u2="Ê" k="20" /> +<hkern u1="ffl" u2="É" k="20" /> +<hkern u1="ffl" u2="È" k="20" /> +<hkern u1="ffl" u2="Ç" k="23" /> +<hkern u1="ffl" u2="Å" k="16" /> +<hkern u1="ffl" u2="Ä" k="16" /> +<hkern u1="ffl" u2="Ã" k="16" /> +<hkern u1="ffl" u2="Â" k="16" /> +<hkern u1="ffl" u2="Á" k="16" /> +<hkern u1="ffl" u2="À" k="16" /> +<hkern u1="ffl" u2="·" k="123" /> +<hkern u1="ffl" u2="Y" k="23" /> +<hkern u1="ffl" u2="V" k="23" /> +<hkern u1="ffl" u2="U" k="37" /> +<hkern u1="ffl" u2="T" k="18" /> +<hkern u1="ffl" u2="S" k="18" /> +<hkern u1="ffl" u2="R" k="20" /> +<hkern u1="ffl" u2="Q" k="23" /> +<hkern u1="ffl" u2="P" k="20" /> +<hkern u1="ffl" u2="O" k="23" /> +<hkern u1="ffl" u2="N" k="20" /> +<hkern u1="ffl" u2="M" k="20" /> +<hkern u1="ffl" u2="L" k="20" /> +<hkern u1="ffl" u2="K" k="20" /> +<hkern u1="ffl" u2="I" k="20" /> +<hkern u1="ffl" u2="H" k="20" /> +<hkern u1="ffl" u2="G" k="23" /> +<hkern u1="ffl" u2="F" k="20" /> +<hkern u1="ffl" u2="E" k="20" /> +<hkern u1="ffl" u2="D" k="20" /> +<hkern u1="ffl" u2="C" k="23" /> +<hkern u1="ffl" u2="B" k="20" /> +<hkern u1="ffl" u2="A" k="16" /> +<hkern u1="ffl" u2="&" k="18" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/src/main/resources/static/resources/fonts/varela_round-webfont.ttf b/src/main/resources/static/resources/fonts/varela_round-webfont.ttf new file mode 100644 index 0000000..3ca0666 Binary files /dev/null and b/src/main/resources/static/resources/fonts/varela_round-webfont.ttf differ diff --git a/src/main/resources/static/resources/fonts/varela_round-webfont.woff b/src/main/resources/static/resources/fonts/varela_round-webfont.woff new file mode 100644 index 0000000..77ba166 Binary files /dev/null and b/src/main/resources/static/resources/fonts/varela_round-webfont.woff differ diff --git a/src/main/resources/static/resources/images/favicon.png b/src/main/resources/static/resources/images/favicon.png new file mode 100644 index 0000000..1c649a3 Binary files /dev/null and b/src/main/resources/static/resources/images/favicon.png differ diff --git a/src/main/resources/static/resources/images/pets.png b/src/main/resources/static/resources/images/pets.png new file mode 100644 index 0000000..bb5cf3a Binary files /dev/null and b/src/main/resources/static/resources/images/pets.png differ diff --git a/src/main/resources/static/resources/images/spring-logo-dataflow-mobile.png b/src/main/resources/static/resources/images/spring-logo-dataflow-mobile.png new file mode 100644 index 0000000..45d24a6 Binary files /dev/null and b/src/main/resources/static/resources/images/spring-logo-dataflow-mobile.png differ diff --git a/src/main/resources/static/resources/images/spring-logo-dataflow.png b/src/main/resources/static/resources/images/spring-logo-dataflow.png new file mode 100644 index 0000000..ff7cdbb Binary files /dev/null and b/src/main/resources/static/resources/images/spring-logo-dataflow.png differ diff --git a/src/main/resources/static/resources/images/spring-logo.svg b/src/main/resources/static/resources/images/spring-logo.svg new file mode 100644 index 0000000..5b2a27a --- /dev/null +++ b/src/main/resources/static/resources/images/spring-logo.svg @@ -0,0 +1,66 @@ +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 2674.9 417"> + <style> + .st0, .st1 { + fill: #6db33f; + } + .st3 { + fill: #fff; + } + </style> + <g> + <path class="st0" + d="M366.9,29c-5.8,14.1-13.3,26.6-21.6,37.8c-36.6-37.3-87.8-61-144.3-61C90,5.8-0.7,96-0.7,207.4 c0,58.2,24.9,110.6,64.4,147.6l7.5,6.7c34.9,29.5,80.3,47.4,129.7,47.4c106,0,193.3-82.7,200.8-187.1 C407.7,171.3,392.3,106.4,366.9,29z M92.9,356.7c-5.8,7.5-16.6,8.3-24.1,2.5s-8.3-16.6-2.5-24.1s16.6-8.3,24.1-2.5 C97.5,338.4,98.7,349.2,92.9,356.7z M365.7,296.4c-49.5,66.1-155.9,43.7-223.7,47c0,0-12.1,0.8-24.1,2.5c0,0,4.6-2.1,10.4-4.2 c47.8-16.6,70.3-20,99.4-34.9c54.5-27.9,108.9-89,119.8-152.2c-20.8,60.7-84,113.1-141.4,134.3c-39.5,14.6-110.6,28.7-110.6,28.7 l-2.9-1.7c-48.2-23.7-49.9-128.5,38.3-162.2c38.7-15,75.3-6.7,117.3-16.6c44.5-10.4,96.1-43.7,116.8-87.3 C388.1,120.1,416.4,229,365.7,296.4z"></path> + <g> + <path class="st1" + d="M516.2,286.4c-5-2.5-8.3-8.3-8.3-15.4c0-10,7.9-18.3,18.3-18.3c3.7,0,7.1,1.2,9.6,2.5 c18.7,12.5,38.7,18.7,56.1,18.7c19.1,0,30.4-8.3,30.4-21.2v-0.8c0-15.4-20.8-20.4-43.7-27.4c-28.7-8.3-61.1-20-61.1-57.4v-0.8 c0-37,30.8-59.5,69.4-59.5c20.8,0,42.4,5.8,61.5,15.8c6.2,3.3,10.8,9.1,10.8,17c0,10.4-8.3,18.3-18.7,18.3c-3.7,0-5.8-0.8-8.7-2.1 c-15.8-8.3-32-13.3-45.7-13.3c-17.5,0-27.4,8.3-27.4,19.1v0.8c0,14.6,21.2,20.4,44.1,27.9c28.7,8.7,60.7,22,60.7,57v0.8 c0,41.2-32,61.5-72.3,61.5C565.7,309.7,538.6,301.8,516.2,286.4z"></path> + <path class="st1" + d="M680,129.7c0-12.5,9.6-22.5,22-22.5s22.5,10,22.5,22.5V143c14.6-20.4,34.9-36.6,66.5-36.6 c45.7,0,90.6,36.2,90.6,101.5v0.8c0,64.9-44.5,101.5-90.6,101.5c-32.4,0-52.8-16.2-66.5-34.5v69c0,12.5-10,22.5-22.5,22.5 c-12.1,0-22-9.6-22-22.5V129.7z M836.8,208.7v-0.8c0-37.8-25.4-62.4-55.7-62.4c-30.4,0-57,25.4-57,62.4v0.8 c0,37.4,26.6,62.4,57,62.4C811.4,271.5,836.8,247.3,836.8,208.7z"></path> + <path class="st1" + d="M899.1,129.7c0-12.5,9.6-22.5,22-22.5s22.5,10,22.5,22.5v10.8c2.1-16.6,29.5-33.3,49.1-33.3 c14.1,0,22,9.1,22,22c0,11.6-7.9,19.5-17.9,21.6c-32,5.4-53.6,33.3-53.6,71.9v64.4c0,12.1-10,22-22.5,22c-12.1,0-22-9.6-22-22 V129.7H899.1z"></path> + <path class="st1" + d="M1032.6,130.1c0-12.5,9.6-22.5,22-22.5s22.5,10,22.5,22.5v157.6c0,12.5-10,22-22.5,22c-12.1,0-22-9.6-22-22 V130.1z"></path> + <path class="st1" + d="M1100,130.1c0-12.5,9.6-22.5,22-22.5s22.5,10,22.5,22.5v9.1c12.5-18.3,30.8-32,61.1-32 c44.1,0,69.4,29.5,69.4,74.8v105.2c0,12.5-9.6,22-22,22s-22.5-9.6-22.5-22v-91.5c0-30.4-15-47.8-42-47.8 c-25.8,0-44.1,18.3-44.1,48.6v91.1c0,12.5-10,22-22.5,22c-12.1,0-22-9.6-22-22L1100,130.1L1100,130.1z"></path> + <path class="st1" + d="M1472.1,106.8c-12.5,0-22.5,10-22.5,22.5v13.3c-14.6-20.4-34.9-36.6-66.5-36.6c-45.7,0-90.6,36.2-90.6,101.5 v0.8c0,64.9,44.5,101.5,90.6,101.5c32.4,0,52.8-16.2,66.5-34.1c-2.1,35.3-23.7,53.6-61.5,53.6c-22.5,0-42-5.4-59.9-15.4 c-2.1-1.2-5-1.7-7.9-1.7c-10.4,0-19.1,8.3-19.1,18.3c0,8.7,5,15,12.5,17.9c23.7,11.6,48.2,17.5,75.7,17.5 c35.3,0,62.8-8.3,80.3-26.2c16.2-16.2,24.9-40.7,24.9-73.6V129.7C1494.6,116.8,1484.6,106.8,1472.1,106.8z M1393.5,271 c-30.8,0-55.7-24.1-55.7-62.8v-0.8c0-37.8,25.4-62.4,55.7-62.4s57,25.4,57,62.4v0.8C1450.9,245.7,1424.3,271,1393.5,271z"></path> + <path class="st1" + d="M1077.5,53.6c0,12.5-10,22.5-22.5,22.5s-22.5-10-22.5-22.5s10-22.5,22.5-22.5 C1067.1,30.7,1077.5,40.7,1077.5,53.6z"></path> + </g> + <g> + <path class="st1" + d="M1545.7,153.8c-12.5,0-22.9-10.4-22.9-22.9c0-12.9,10.4-22.9,22.9-22.9c12.9,0,22.9,10.4,22.9,22.9 S1558.6,153.8,1545.7,153.8z M1545.7,111.4c-10.8,0-19.5,8.7-19.5,19.5s8.7,19.5,19.5,19.5s19.5-8.7,19.5-19.5 C1565.2,119.7,1556.5,111.4,1545.7,111.4z M1551.9,143.8l-6.7-10.4h-4.6v10.4h-3.7v-26.2h10.8c4.6,0,8.7,3.3,8.7,7.9 c0,5.8-5.4,7.9-6.7,7.9l7.1,10.4H1551.9L1551.9,143.8z M1547.4,120.9h-6.7v9.1h7.1c2.1,0,4.6-1.7,4.6-4.6 C1552.4,122.6,1549.9,120.9,1547.4,120.9z"></path> + </g> + <g> + <path class="st1" + d="M1652.3,260.1c0,20-12.8,34.1-30,34.1c-10.4,0-18.8-5.2-23.7-13.7v12.2h-9.4v-88h9.4v35.1 c4.9-8.6,13.2-13.7,23.7-13.7C1639.4,226.1,1652.3,240.2,1652.3,260.1z M1642.3,260.1c0-15-9.1-25.6-21.8-25.6 c-12.8,0-21.9,10.6-21.9,25.6s9.1,25.7,21.9,25.7C1633.3,285.8,1642.3,275.1,1642.3,260.1z"></path> + <path class="st1" + d="M1668,313.3l2.3-8.1c2.3,1.1,4.9,1.6,7.7,1.6c4.2,0,6.9-1.4,9.4-5.8l3.8-8.1l-28.3-65.3h10.4l22.8,54.1 l21.5-54.1h10.2l-29.7,72.4c-4.5,11.1-10.8,15.2-19.8,15.4C1674.6,315.4,1671,314.6,1668,313.3z"></path> + <path class="st1" + d="M1861.3,206.2l-38.1,86.5h-10.7l-38.1-86.5h10.7l32.9,74.4l32.7-74.4L1861.3,206.2L1861.3,206.2z"></path> + <path class="st1" + d="M1877.1,206.2h9.8l32.1,60.3l32.1-60.3h9.8v86.5h-9.8v-65.3l-32.1,60.3l-32.1-60.3v65.3h-9.8V206.2z"></path> + <path class="st1" + d="M1977.2,227.6h10.1l16.2,52.5l17.8-52.5h8.2l17.8,52.5l16.2-52.5h10.1l-21.9,65.1h-8.9l-17.2-52l-17.5,52 h-8.9L1977.2,227.6z"></path> + <path class="st1" + d="M2140.1,253.1v39.7h-9.4v-10.2c-4.7,7.7-14.4,11.7-22.9,11.7c-13.7,0-23.8-7.9-23.8-20.8 c0-13,11.6-21.7,25.6-21.7c7,0,14.5,1.5,21.2,3.7v-2.4c0-8.8-3.5-18.9-17.6-18.9c-6.5,0-13.1,2.9-19,5.9l-3.8-7.7 c9.3-4.7,17.1-6.3,23.4-6.3C2131.4,226.1,2140.1,237.3,2140.1,253.1z M2130.7,272.3v-9.9c-5.9-1.6-12.6-2.6-19.6-2.6 c-9.7,0-17.9,5.5-17.9,13.3c0,8.1,7,12.8,16.2,12.8C2118,285.9,2128.2,281.5,2130.7,272.3z"></path> + <path class="st1" + d="M2194.9,226.1v8.4c-14.7,0-25.2,9.1-25.2,21.8v36.4h-9.4v-65.1h9.4v12.7 C2173.6,231.7,2182.9,226.1,2194.9,226.1z"></path> + <path class="st1" + d="M2257.8,278l5.8,6.2c-5.7,6.2-17.1,10.1-26.2,10.1c-17.4,0-33-14.2-33-34.2c0-19.4,14.6-33.9,32.1-33.9 c19.6,0,30.8,14.9,30.8,37.6H2214c1.4,12.7,10.3,22,23.2,22C2245,285.8,2253.8,282.4,2257.8,278z M2214.3,255.3h43.8 c-1.3-11.7-8.2-20.8-21.2-20.8C2225.4,234.6,2216.1,242.7,2214.3,255.3z"></path> + <path class="st1" + d="M2344.6,215.6h-29.1v-9.3h68v9.3h-29.1v77.2h-9.8L2344.6,215.6L2344.6,215.6z"></path> + <path class="st1" + d="M2451.6,253.1v39.7h-9.4v-10.2c-4.7,7.7-14.4,11.7-22.9,11.7c-13.7,0-23.8-7.9-23.8-20.8 c0-13,11.6-21.7,25.6-21.7c7,0,14.5,1.5,21.2,3.7v-2.4c0-8.8-3.5-18.9-17.6-18.9c-6.5,0-13.1,2.9-19,5.9l-3.8-7.7 c9.3-4.7,17.1-6.3,23.4-6.3C2442.9,226.1,2451.6,237.3,2451.6,253.1z M2442.2,272.3v-9.9c-5.9-1.6-12.6-2.6-19.6-2.6 c-9.7,0-17.9,5.5-17.9,13.3c0,8.1,7,12.8,16.2,12.8C2429.4,285.9,2439.6,281.5,2442.2,272.3z"></path> + <path class="st1" + d="M2526.3,251.3v41.4h-9.4v-40.2c0-10.6-6.7-18-16.2-18c-11,0-20.1,7.7-20.1,16.7v41.4h-9.4v-65.1h9.4v10.4 c3.8-6.9,12.2-12,21.4-12C2516.2,226.1,2526.3,236.6,2526.3,251.3z"></path> + <path class="st1" + d="M2542.6,285.3l38.4-48.7h-37.6v-8.9h50.4v7.4l-38.5,48.7h38.8v8.9h-51.4L2542.6,285.3L2542.6,285.3z"></path> + <path class="st1" + d="M2665.4,227.6v65.1h-9.4v-10.4c-3.8,6.9-12.2,12-21.4,12c-14.4,0-24.4-10.4-24.4-25.2v-41.4h9.4v40.2 c0,10.6,6.7,18,16.2,18c11,0,20.1-7.7,20.1-16.7v-41.4h9.5V227.6z"></path> + </g> + </g> + <path class="st3" + d="M92.9,356.7c-5.8,7.5-16.6,8.3-24.1,2.5s-8.3-16.6-2.5-24.1s16.6-8.3,24.1-2.5 C97.5,338.4,98.7,349.2,92.9,356.7z"></path> + <path class="st3" + d="M365.7,296.4c-49.5,66.1-155.9,43.7-223.7,47c0,0-12.1,0.8-24.1,2.5c0,0,4.6-2.1,10.4-4.2 c47.8-16.6,70.3-20,99.4-34.9c54.5-27.9,108.9-89,119.8-152.2c-20.8,60.7-84,113.1-141.4,134.3c-39.5,14.6-110.6,28.7-110.6,28.7 l-2.9-1.7c-48.2-23.7-49.9-128.5,38.3-162.2c38.7-15,75.3-6.7,117.3-16.6c44.5-10.4,96.1-43.7,116.8-87.3 C388.1,120.1,416.4,229,365.7,296.4z"></path> +</svg> diff --git a/src/main/resources/templates/error.html b/src/main/resources/templates/error.html new file mode 100644 index 0000000..5f1d6f3 --- /dev/null +++ b/src/main/resources/templates/error.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> + +<html xmlns:th="https://www.thymeleaf.org" th:replace="~{fragments/layout :: layout (~{::body},'error')}"> + +<body> + <img src="../static/resources/images/pets.png" th:src="@{/resources/images/pets.png}" /> + <!-- Title: Something happened --> + <h2 th:text="#{somethingHappened}">Something happened...</h2> + + <!-- Status-specific error message --> + <p th:switch="${status}"> + <span th:case="404" th:text="#{error.404}">The requested page was not found.</span> + <span th:case="500" th:text="#{error.500}">An internal server error occurred.</span> + <span th:case="*" th:text="#{error.general}">An unexpected error occurred.</span> + </p> + + <!-- Exception message (for developers) --> + <p th:text="${message}">Exception message</p> +</body> + +</html> diff --git a/src/main/resources/templates/fragments/inputField.html b/src/main/resources/templates/fragments/inputField.html new file mode 100644 index 0000000..da1de47 --- /dev/null +++ b/src/main/resources/templates/fragments/inputField.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> + +<html xmlns:th="https://www.thymeleaf.org"> + +<body> + <form> + <th:block th:fragment="input (label, name, type)"> + <div th:with="valid=${!#fields.hasErrors(name)}" th:class="${'form-group' + (valid ? '' : ' has-error')}" + class="form-group"> + <label th:for="${name}" class="col-sm-2 control-label" th:text="${label}">Label</label> + <div class="col-sm-10"> + <div th:switch="${type}"> + <input th:case="'text'" class="form-control" type="text" th:field="*{__${name}__}" /> + <input th:case="'date'" class="form-control" type="date" th:field="*{__${name}__}" /> + </div> + <span th:if="${valid}" class="fa fa-ok form-control-feedback" aria-hidden="true"></span> + <th:block th:if="${!valid}"> + <span class="fa fa-remove form-control-feedback" aria-hidden="true"></span> + <span class="help-inline" th:errors="*{__${name}__}" th:text="#{error}">Error</span> + </th:block> + </div> + </div> + </th:block> + </form> +</body> + +</html> \ No newline at end of file diff --git a/src/main/resources/templates/fragments/layout.html b/src/main/resources/templates/fragments/layout.html new file mode 100644 index 0000000..7c5cd0d --- /dev/null +++ b/src/main/resources/templates/fragments/layout.html @@ -0,0 +1,88 @@ +<!DOCTYPE html> + +<html th:fragment="layout (template, menu)" xmlns:th="https://www.thymeleaf.org"> + +<head> + + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" type="image/x-icon" th:href="@{/resources/images/favicon.png}"> + <title th:text="#{layoutTitle}">PetClinic :: a Spring Framework demonstration + + + + + + + + +
+
+ + + +
+
+
+
+
+ +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/fragments/selectField.html b/src/main/resources/templates/fragments/selectField.html new file mode 100644 index 0000000..d248864 --- /dev/null +++ b/src/main/resources/templates/fragments/selectField.html @@ -0,0 +1,27 @@ + + + + + +
+ +
+ + +
+ + + + + Error + +
+
+
+
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/owners/createOrUpdateOwnerForm.html b/src/main/resources/templates/owners/createOrUpdateOwnerForm.html new file mode 100644 index 0000000..4cd6e11 --- /dev/null +++ b/src/main/resources/templates/owners/createOrUpdateOwnerForm.html @@ -0,0 +1,25 @@ + + + + + + +

Owner

+
+
+ + + + + +
+
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/owners/findOwners.html b/src/main/resources/templates/owners/findOwners.html new file mode 100644 index 0000000..703351c --- /dev/null +++ b/src/main/resources/templates/owners/findOwners.html @@ -0,0 +1,35 @@ + + + + + + +

Find Owners

+ +
+
+
+ +
+ + +
+

Error

+
+
+
+
+
+
+
+ +
+
+ + Add Owner + +
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/owners/ownerDetails.html b/src/main/resources/templates/owners/ownerDetails.html new file mode 100644 index 0000000..cc175cd --- /dev/null +++ b/src/main/resources/templates/owners/ownerDetails.html @@ -0,0 +1,96 @@ + + + + + + +

Owner Information

+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + +
Name
Address
City
Telephone
+ + Edit + Owner + Add + New Pet + +
+
+
+

Pets and Visits

+ + + + + + + + +
+
+
Name
+
+
Birth Date
+
+
Type
+
+
+
+ + + + + + + + + + + + + + + +
Visit DateDescription
Edit PetAdd Visit
+
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/owners/ownersList.html b/src/main/resources/templates/owners/ownersList.html new file mode 100644 index 0000000..01223c1 --- /dev/null +++ b/src/main/resources/templates/owners/ownersList.html @@ -0,0 +1,61 @@ + + + + + + +

Owners

+ + + + + + + + + + + + + + + + + +
NameAddressCityTelephonePets
+ + + + +
+
+ Pages: + [ + + [[${i}]] + [[${i}]] + + + + + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/pets/createOrUpdatePetForm.html b/src/main/resources/templates/pets/createOrUpdatePetForm.html new file mode 100644 index 0000000..396963d --- /dev/null +++ b/src/main/resources/templates/pets/createOrUpdatePetForm.html @@ -0,0 +1,34 @@ + + + + + + +

+ New + Pet +

+
+ +
+
+ +
+ +
+
+ + + +
+
+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/pets/createOrUpdateVisitForm.html b/src/main/resources/templates/pets/createOrUpdateVisitForm.html new file mode 100644 index 0000000..4f03e12 --- /dev/null +++ b/src/main/resources/templates/pets/createOrUpdateVisitForm.html @@ -0,0 +1,59 @@ + + + + + + +

+ New + Visit +

+ + Pet + + + + + + + + + + + + + + + +
NameBirth DateTypeOwner
+ +
+
+ + +
+ +
+
+ + +
+
+
+ +
+ Previous Visits + + + + + + + + + +
DateDescription
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/vets/vetList.html b/src/main/resources/templates/vets/vetList.html new file mode 100644 index 0000000..e40fd65 --- /dev/null +++ b/src/main/resources/templates/vets/vetList.html @@ -0,0 +1,57 @@ + + + + + + +

Veterinarians

+ + + + + + + + + + + + + + +
NameSpecialties
+ none +
+
+ Pages: + [ + + [[${i}]] + [[${i}]] + + + + + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/welcome.html b/src/main/resources/templates/welcome.html new file mode 100644 index 0000000..eb795c2 --- /dev/null +++ b/src/main/resources/templates/welcome.html @@ -0,0 +1,16 @@ + + + + + + +

Welcome

+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/src/main/scss/header.scss b/src/main/scss/header.scss new file mode 100644 index 0000000..7cb1a78 --- /dev/null +++ b/src/main/scss/header.scss @@ -0,0 +1,73 @@ +.navbar { + border-top: 4px solid #6db33f; + background-color: #34302d; + margin-bottom: 0px; + border-bottom: 0; + border-left: 0; + border-right: 0; +} + +.navbar a.navbar-brand { + background: url("../images/spring-logo-dataflow.png") -1px -1px no-repeat; + margin: 12px 0 6px; + width: 229px; + height: 46px; + display: inline-block; + text-decoration: none; + padding: 0; +} + +.navbar a.navbar-brand span { + display: block; + width: 229px; + height: 46px; + background: url("../images/spring-logo-dataflow.png") -1px -48px no-repeat; + opacity: 0; + -moz-transition: opacity 0.12s ease-in-out; + -webkit-transition: opacity 0.12s ease-in-out; + -o-transition: opacity 0.12s ease-in-out; +} + +.navbar a:hover.navbar-brand span { + opacity: 1; +} + +.navbar li > a, .navbar-text { + font-family: "montserratregular", sans-serif; + text-shadow: none; + font-size: 14px; + +/* line-height: 14px; */ + padding: 28px 20px; + transition: all 0.15s; + -webkit-transition: all 0.15s; + -moz-transition: all 0.15s; + -o-transition: all 0.15s; + -ms-transition: all 0.15s; +} + +.navbar li > a { + text-transform: uppercase; +} + +.navbar .navbar-text { + margin-top: 0; + margin-bottom: 0; +} +.navbar li:hover > a { + color: #eeeeee; + background-color: #6db33f; +} + +.navbar-toggle { + border-width: 0; + + .icon-bar + .icon-bar { + margin-top: 3px; + } + .icon-bar { + width: 19px; + height: 3px; + } + +} diff --git a/src/main/scss/petclinic.scss b/src/main/scss/petclinic.scss new file mode 100644 index 0000000..7f3e64e --- /dev/null +++ b/src/main/scss/petclinic.scss @@ -0,0 +1,214 @@ +/* + * Copyright 2016 the original author or authors. + * + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + @import "bootstrap"; + +$icon-font-path: "../../webjars/bootstrap/fonts/"; + +$spring-green: #6db33f; +$spring-dark-green: #5fa134; +$spring-brown: #34302D; +$spring-grey: #838789; +$spring-light-grey: #f1f1f1; + +$body-bg: $spring-light-grey; +$text-color: $spring-brown; +$link-color: $spring-dark-green; +$link-hover-color: $spring-dark-green; + +$navbar-default-link-color: $spring-light-grey; +$navbar-default-link-active-color: $spring-light-grey; +$navbar-default-link-hover-color: $spring-light-grey; +$navbar-default-link-hover-bg: $spring-green; +$navbar-default-toggle-icon-bar-bg: $spring-light-grey; +$navbar-default-toggle-hover-bg: transparent; +$navbar-default-link-active-bg: $spring-green; + +$border-radius-base: 0; +$border-radius-large: 0; +$border-radius-small: 0; + +$nav-tabs-active-link-hover-color: $spring-light-grey; +$nav-tabs-active-link-hover-bg: $spring-brown; +$nav-tabs-active-link-hover-border-color: $spring-brown; +$nav-tabs-border-color: $spring-brown; + +$pagination-active-bg: $spring-brown; +$pagination-active-border: $spring-green; +$table-border-color: $spring-brown; + +.table > thead > tr > th { + background-color: lighten($spring-brown, 3%); + color: $spring-light-grey; +} + +.table-filter { + background-color: $spring-brown; + padding: 9px 12px; +} + +.nav > li > a { + color: $spring-grey; +} + +.btn-primary { + margin-top: 12px; + border-width: 2px; + transition: border 0.15s; + color: $spring-light-grey; + background: $spring-brown; + border-color: $spring-green; + -webkit-transition: border 0.15s; + -moz-transition: border 0.15s; + -o-transition: border 0.15s; + -ms-transition: border 0.15s; + + &:hover, + &:focus, + &:active, + &.active, + .open .dropdown-toggle { + background-color: $spring-brown; + border-color: $spring-brown; + } +} + + +.container .text-muted { + margin: 20px 0; +} + +code { + font-size: 80%; +} + +.xd-container { + margin-top: 40px; + margin-bottom: 100px; + padding-left: 5px; + padding-right: 5px; +} + +h1 { + margin-bottom: 15px +} + +.index-page--subtitle { + font-size: 16px; + line-height: 24px; + margin: 0 0 30px; +} + +.form-horizontal button.btn-inverse { + margin-left: 32px; +} + +#job-params-modal .modal-dialog { + width: 90%; + margin-left:auto; + margin-right:auto; +} + +[ng-cloak].splash { + display: block !important; +} +[ng-cloak] { + display: none; +} + +.splash { + background: $spring-green; + color: $spring-brown; + display: none; +} + +.error-page { + margin-top: 100px; + text-align: center; +} + +.error-page .error-title { + font-size: 24px; + line-height: 24px; + margin: 30px 0 0; +} + +table td { + vertical-align: middle; +} + +table td .progress { + margin-bottom: 0; +} + +table td.action-column { + width: 1px; +} + +.help-block { + color: lighten($text-color, 50%); // lighten the text some for contrast +} + +.xd-containers { + font-size: 15px; +} + +.cluster-view > table td { + vertical-align: top; +} + +.cluster-view .label, .cluster-view .column-block { + display: block; +} + +.cluster-view .input-group-addon { + width: 0%; +} + +.cluster-view { + margin-bottom: 0; +} + +.container-details-table th { + background-color: lighten($spring-brown, 3%); + color: $spring-light-grey; +} + +.status-help-content-table td { + color: $spring-brown; +} + +.logo { + width: 200px; +} + +.myspinner { + animation-name: spinner; + animation-duration: 2s; + animation-iteration-count: infinite; + animation-timing-function: linear; + + -webkit-transform-origin: 49% 50%; + -webkit-animation-name: spinner; + -webkit-animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; +} + +hr { + border-top: 1px dotted $spring-brown; +} + +@import "typography.scss"; +@import "header.scss"; +@import "responsive.scss"; diff --git a/src/main/scss/responsive.scss b/src/main/scss/responsive.scss new file mode 100644 index 0000000..96a720c --- /dev/null +++ b/src/main/scss/responsive.scss @@ -0,0 +1,41 @@ +@media (max-width: 768px) { + .navbar-toggle { + position:absolute; + z-index: 9999; + left:0px; + top:0px; + } + + .navbar a.navbar-brand { + display: block; + margin: 0 auto 0 auto; + width: 148px; + height: 50px; + float: none; + background: url("../images/spring-logo-dataflow-mobile.png") 0 center no-repeat; + } + + .homepage-billboard .homepage-subtitle { + font-size: 21px; + line-height: 21px; + } + + .navbar a.navbar-brand span { + display: none; + } + + .navbar { + border-top-width: 0; + } + + .xd-container { + margin-top: 20px; + margin-bottom: 30px; + } + + .index-page--subtitle { + margin-top: 10px; + margin-bottom: 30px; + } + +} diff --git a/src/main/scss/typography.scss b/src/main/scss/typography.scss new file mode 100644 index 0000000..8b8436e --- /dev/null +++ b/src/main/scss/typography.scss @@ -0,0 +1,60 @@ +@font-face { + font-family: 'varela_roundregular'; + + src: url('../fonts/varela_round-webfont.eot'); + src: url('../fonts/varela_round-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/varela_round-webfont.woff') format('woff'), + url('../fonts/varela_round-webfont.ttf') format('truetype'), + url('../fonts/varela_round-webfont.svg#varela_roundregular') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'montserratregular'; + src: url('../fonts/montserrat-webfont.eot'); + src: url('../fonts/montserrat-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/montserrat-webfont.woff') format('woff'), + url('../fonts/montserrat-webfont.ttf') format('truetype'), + url('../fonts/montserrat-webfont.svg#montserratregular') format('svg'); + font-weight: normal; + font-style: normal; +} + +body, h1, h2, h3, p, input { + margin: 0; + font-weight: 400; + font-family: "varela_roundregular", sans-serif; + color: #34302d; +} + +h1 { + font-size: 24px; + line-height: 30px; + font-family: "montserratregular", sans-serif; +} + +h2 { + font-size: 18px; + font-weight: 700; + line-height: 24px; + margin-bottom: 10px; + font-family: "montserratregular", sans-serif; +} + +h3 { + font-size: 16px; + line-height: 24px; + margin-bottom: 10px; + font-weight: 700; +} + +p { + //font-size: 15px; + //line-height: 24px; +} + +strong { + font-weight: 700; + font-family: "montserratregular", sans-serif; +} diff --git a/src/test/java/org/springframework/samples/petclinic/MySqlIntegrationTests.java b/src/test/java/org/springframework/samples/petclinic/MySqlIntegrationTests.java new file mode 100644 index 0000000..076f3a7 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/MySqlIntegrationTests.java @@ -0,0 +1,74 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledInNativeImage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.restclient.RestTemplateBuilder; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.http.HttpStatus; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.samples.petclinic.vet.VetRepository; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.aot.DisabledInAotMode; +import org.springframework.web.client.RestTemplate; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.mysql.MySQLContainer; +import org.testcontainers.utility.DockerImageName; + +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@ActiveProfiles("mysql") +@Testcontainers(disabledWithoutDocker = true) +@DisabledInNativeImage +@DisabledInAotMode +class MySqlIntegrationTests { + + @ServiceConnection + @Container + static MySQLContainer container = new MySQLContainer(DockerImageName.parse("mysql:9.6")); + + @LocalServerPort + int port; + + @Autowired + private VetRepository vets; + + @Autowired + private RestTemplateBuilder builder; + + @Test + void findAll() { + vets.findAll(); + vets.findAll(); // served from cache + } + + @Test + void ownerDetails() { + RestTemplate template = builder.rootUri("http://localhost:" + port).build(); + ResponseEntity result = template.exchange(RequestEntity.get("/owners/1").build(), String.class); + assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java b/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java new file mode 100644 index 0000000..55347c7 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java @@ -0,0 +1,47 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.testcontainers.mysql.MySQLContainer; +import org.testcontainers.utility.DockerImageName; + +/** + * PetClinic Spring Boot Application. + * + * @author Dave Syer + */ +@Configuration +public class MysqlTestApplication { + + @ServiceConnection + @Profile("mysql") + @Bean + static MySQLContainer container() { + return new MySQLContainer(DockerImageName.parse("mysql:9.6")); + } + + public static void main(String[] args) { + SpringApplication.run(PetClinicApplication.class, "--spring.profiles.active=mysql", + "--spring.docker.compose.enabled=false"); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/PetClinicIntegrationTests.java b/src/test/java/org/springframework/samples/petclinic/PetClinicIntegrationTests.java new file mode 100644 index 0000000..b753654 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/PetClinicIntegrationTests.java @@ -0,0 +1,70 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.restclient.RestTemplateBuilder; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.http.HttpStatus; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.samples.petclinic.vet.VetRepository; +import org.springframework.web.client.RestTemplate; + +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = "logging.level.sql=DEBUG") +public class PetClinicIntegrationTests { + + @LocalServerPort + int port; + + @Autowired + private VetRepository vets; + + @Autowired + private RestTemplateBuilder builder; + + @Test + void findAll() { + vets.findAll(); + vets.findAll(); // served from cache + } + + @Test + void ownerDetails() { + RestTemplate template = builder.rootUri("http://localhost:" + port).build(); + ResponseEntity result = template.exchange(RequestEntity.get("/owners/1").build(), String.class); + assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + void ownerList() { + RestTemplate template = builder.rootUri("http://localhost:" + port).build(); + ResponseEntity result = template.exchange(RequestEntity.get("/owners?lastName=").build(), String.class); + assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + public static void main(String[] args) { + SpringApplication.run(PetClinicApplication.class, "--spring.docker.compose.lifecycle-management=NONE"); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/PostgresIntegrationTests.java b/src/test/java/org/springframework/samples/petclinic/PostgresIntegrationTests.java new file mode 100644 index 0000000..ecbbe23 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/PostgresIntegrationTests.java @@ -0,0 +1,150 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assumptions.assumeTrue; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledInNativeImage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.context.event.ApplicationPreparedEvent; +import org.springframework.boot.restclient.RestTemplateBuilder; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.context.ApplicationListener; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.EnumerablePropertySource; +import org.springframework.core.env.PropertySource; +import org.springframework.http.HttpStatus; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.samples.petclinic.vet.VetRepository; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.web.client.RestTemplate; +import org.testcontainers.DockerClientFactory; + +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = { "spring.docker.compose.skip.in-tests=false", // + "spring.docker.compose.start.arguments=--force-recreate,--renew-anon-volumes,postgres" }) +@ActiveProfiles("postgres") +@DisabledInNativeImage +public class PostgresIntegrationTests { + + @LocalServerPort + int port; + + @Autowired + private VetRepository vets; + + @Autowired + private RestTemplateBuilder builder; + + @BeforeAll + static void available() { + assumeTrue(DockerClientFactory.instance().isDockerAvailable(), "Docker not available"); + } + + public static void main(String[] args) { + new SpringApplicationBuilder(PetClinicApplication.class) // + .profiles("postgres") // + .properties( // + "spring.docker.compose.start.arguments=postgres" // + ) // + .listeners(new PropertiesLogger()) // + .run(args); + } + + @Test + void findAll() throws Exception { + vets.findAll(); + vets.findAll(); // served from cache + } + + @Test + void ownerDetails() { + RestTemplate template = builder.rootUri("http://localhost:" + port).build(); + ResponseEntity result = template.exchange(RequestEntity.get("/owners/1").build(), String.class); + assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + static class PropertiesLogger implements ApplicationListener { + + private static final Log log = LogFactory.getLog(PropertiesLogger.class); + + private ConfigurableEnvironment environment; + + private boolean isFirstRun = true; + + @Override + public void onApplicationEvent(ApplicationPreparedEvent event) { + if (isFirstRun) { + environment = event.getApplicationContext().getEnvironment(); + printProperties(); + } + isFirstRun = false; + } + + public void printProperties() { + for (EnumerablePropertySource source : findPropertiesPropertySources()) { + log.info("PropertySource: " + source.getName()); + String[] names = source.getPropertyNames(); + Arrays.sort(names); + for (String name : names) { + String resolved = environment.getProperty(name); + + assertNotNull(resolved, "resolved environment property: " + name + " is null."); + + Object sourceProperty = source.getProperty(name); + + assertNotNull(sourceProperty, "source property was expecting an object but is null."); + + assertNotNull(sourceProperty.toString(), "source property toString() returned null."); + + String value = sourceProperty.toString(); + if (resolved.equals(value)) { + log.info(name + "=" + resolved); + } + else { + log.info(name + "=" + value + " OVERRIDDEN to " + resolved); + } + } + } + } + + private List> findPropertiesPropertySources() { + List> sources = new LinkedList<>(); + for (PropertySource source : environment.getPropertySources()) { + if (source instanceof EnumerablePropertySource enumerable) { + sources.add(enumerable); + } + } + return sources; + } + + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/model/ValidatorTests.java b/src/test/java/org/springframework/samples/petclinic/model/ValidatorTests.java new file mode 100644 index 0000000..559311f --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/model/ValidatorTests.java @@ -0,0 +1,60 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.model; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Locale; +import java.util.Set; + +import org.junit.jupiter.api.Test; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; + +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; + +/** + * @author Michael Isvy Simple test to make sure that Bean Validation is working (useful + * when upgrading to a new version of Hibernate Validator/ Bean Validation) + */ +class ValidatorTests { + + private Validator createValidator() { + LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); + localValidatorFactoryBean.afterPropertiesSet(); + return localValidatorFactoryBean; + } + + @Test + void shouldNotValidateWhenFirstNameEmpty() { + + LocaleContextHolder.setLocale(Locale.ENGLISH); + Person person = new Person(); + person.setFirstName(""); + person.setLastName("smith"); + + Validator validator = createValidator(); + Set> constraintViolations = validator.validate(person); + + assertThat(constraintViolations).hasSize(1); + ConstraintViolation violation = constraintViolations.iterator().next(); + assertThat(violation.getPropertyPath()).hasToString("firstName"); + assertThat(violation.getMessage()).isEqualTo("must not be blank"); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java b/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java new file mode 100644 index 0000000..558b9ae --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java @@ -0,0 +1,251 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.owner; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledInNativeImage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.test.context.aot.DisabledInAotMode; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; + +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for {@link OwnerController} + * + * @author Colin But + * @author Wick Dynex + */ +@WebMvcTest(OwnerController.class) +@DisabledInNativeImage +@DisabledInAotMode +class OwnerControllerTests { + + private static final int TEST_OWNER_ID = 1; + + @Autowired + private MockMvc mockMvc; + + @MockitoBean + private OwnerRepository owners; + + private Owner george() { + Owner george = new Owner(); + george.setId(TEST_OWNER_ID); + george.setFirstName("George"); + george.setLastName("Franklin"); + george.setAddress("110 W. Liberty St."); + george.setCity("Madison"); + george.setTelephone("6085551023"); + Pet max = new Pet(); + PetType dog = new PetType(); + dog.setName("dog"); + max.setType(dog); + max.setName("Max"); + max.setBirthDate(LocalDate.now()); + george.addPet(max); + max.setId(1); + return george; + } + + @BeforeEach + void setup() { + + Owner george = george(); + given(this.owners.findByLastNameStartingWith(eq("Franklin"), any(Pageable.class))) + .willReturn(new PageImpl<>(List.of(george))); + + given(this.owners.findById(TEST_OWNER_ID)).willReturn(Optional.of(george)); + Visit visit = new Visit(); + visit.setDate(LocalDate.now()); + george.getPet("Max").getVisits().add(visit); + + } + + @Test + void initCreationForm() throws Exception { + mockMvc.perform(get("/owners/new")) + .andExpect(status().isOk()) + .andExpect(model().attributeExists("owner")) + .andExpect(view().name("owners/createOrUpdateOwnerForm")); + } + + @Test + void processCreationFormSuccess() throws Exception { + mockMvc + .perform(post("/owners/new").param("firstName", "Joe") + .param("lastName", "Bloggs") + .param("address", "123 Caramel Street") + .param("city", "London") + .param("telephone", "1316761638")) + .andExpect(status().is3xxRedirection()); + } + + @Test + void processCreationFormHasErrors() throws Exception { + mockMvc + .perform(post("/owners/new").param("firstName", "Joe").param("lastName", "Bloggs").param("city", "London")) + .andExpect(status().isOk()) + .andExpect(model().attributeHasErrors("owner")) + .andExpect(model().attributeHasFieldErrors("owner", "address")) + .andExpect(model().attributeHasFieldErrors("owner", "telephone")) + .andExpect(view().name("owners/createOrUpdateOwnerForm")); + } + + @Test + void initFindForm() throws Exception { + mockMvc.perform(get("/owners/find")) + .andExpect(status().isOk()) + .andExpect(model().attributeExists("owner")) + .andExpect(view().name("owners/findOwners")); + } + + @Test + void processFindFormSuccess() throws Exception { + Page tasks = new PageImpl<>(List.of(george(), new Owner())); + when(this.owners.findByLastNameStartingWith(anyString(), any(Pageable.class))).thenReturn(tasks); + mockMvc.perform(get("/owners?page=1")).andExpect(status().isOk()).andExpect(view().name("owners/ownersList")); + } + + @Test + void processFindFormByLastName() throws Exception { + Page tasks = new PageImpl<>(List.of(george())); + when(this.owners.findByLastNameStartingWith(eq("Franklin"), any(Pageable.class))).thenReturn(tasks); + mockMvc.perform(get("/owners?page=1").param("lastName", "Franklin")) + .andExpect(status().is3xxRedirection()) + .andExpect(view().name("redirect:/owners/" + TEST_OWNER_ID)); + } + + @Test + void processFindFormNoOwnersFound() throws Exception { + Page tasks = new PageImpl<>(List.of()); + when(this.owners.findByLastNameStartingWith(eq("Unknown Surname"), any(Pageable.class))).thenReturn(tasks); + mockMvc.perform(get("/owners?page=1").param("lastName", "Unknown Surname")) + .andExpect(status().isOk()) + .andExpect(model().attributeHasFieldErrors("owner", "lastName")) + .andExpect(model().attributeHasFieldErrorCode("owner", "lastName", "notFound")) + .andExpect(view().name("owners/findOwners")); + + } + + @Test + void initUpdateOwnerForm() throws Exception { + mockMvc.perform(get("/owners/{ownerId}/edit", TEST_OWNER_ID)) + .andExpect(status().isOk()) + .andExpect(model().attributeExists("owner")) + .andExpect(model().attribute("owner", hasProperty("lastName", is("Franklin")))) + .andExpect(model().attribute("owner", hasProperty("firstName", is("George")))) + .andExpect(model().attribute("owner", hasProperty("address", is("110 W. Liberty St.")))) + .andExpect(model().attribute("owner", hasProperty("city", is("Madison")))) + .andExpect(model().attribute("owner", hasProperty("telephone", is("6085551023")))) + .andExpect(view().name("owners/createOrUpdateOwnerForm")); + } + + @Test + void processUpdateOwnerFormSuccess() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/edit", TEST_OWNER_ID).param("firstName", "Joe") + .param("lastName", "Bloggs") + .param("address", "123 Caramel Street") + .param("city", "London") + .param("telephone", "1616291589")) + .andExpect(status().is3xxRedirection()) + .andExpect(view().name("redirect:/owners/{ownerId}")); + } + + @Test + void processUpdateOwnerFormUnchangedSuccess() throws Exception { + mockMvc.perform(post("/owners/{ownerId}/edit", TEST_OWNER_ID)) + .andExpect(status().is3xxRedirection()) + .andExpect(view().name("redirect:/owners/{ownerId}")); + } + + @Test + void processUpdateOwnerFormHasErrors() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/edit", TEST_OWNER_ID).param("firstName", "Joe") + .param("lastName", "Bloggs") + .param("address", "") + .param("telephone", "")) + .andExpect(status().isOk()) + .andExpect(model().attributeHasErrors("owner")) + .andExpect(model().attributeHasFieldErrors("owner", "address")) + .andExpect(model().attributeHasFieldErrors("owner", "telephone")) + .andExpect(view().name("owners/createOrUpdateOwnerForm")); + } + + @Test + void showOwner() throws Exception { + mockMvc.perform(get("/owners/{ownerId}", TEST_OWNER_ID)) + .andExpect(status().isOk()) + .andExpect(model().attribute("owner", hasProperty("lastName", is("Franklin")))) + .andExpect(model().attribute("owner", hasProperty("firstName", is("George")))) + .andExpect(model().attribute("owner", hasProperty("address", is("110 W. Liberty St.")))) + .andExpect(model().attribute("owner", hasProperty("city", is("Madison")))) + .andExpect(model().attribute("owner", hasProperty("telephone", is("6085551023")))) + .andExpect(model().attribute("owner", hasProperty("pets", not(empty())))) + .andExpect(model().attribute("owner", + hasProperty("pets", hasItem(hasProperty("visits", hasSize(greaterThan(0))))))) + .andExpect(view().name("owners/ownerDetails")); + } + + @Test + void processUpdateOwnerFormWithIdMismatch() throws Exception { + int pathOwnerId = 1; + + Owner owner = new Owner(); + owner.setId(2); + owner.setFirstName("John"); + owner.setLastName("Doe"); + owner.setAddress("Center Street"); + owner.setCity("New York"); + owner.setTelephone("0123456789"); + + when(owners.findById(pathOwnerId)).thenReturn(Optional.of(owner)); + + mockMvc.perform(MockMvcRequestBuilders.post("/owners/{ownerId}/edit", pathOwnerId).flashAttr("owner", owner)) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("/owners/" + pathOwnerId + "/edit")) + .andExpect(flash().attributeExists("error")); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/owner/PetControllerTests.java b/src/test/java/org/springframework/samples/petclinic/owner/PetControllerTests.java new file mode 100644 index 0000000..e7d16d7 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/owner/PetControllerTests.java @@ -0,0 +1,211 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.owner; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledInNativeImage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.FilterType; +import org.springframework.test.context.aot.DisabledInAotMode; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.web.servlet.MockMvc; + +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; + +import static org.mockito.BDDMockito.given; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + +/** + * Test class for the {@link PetController} + * + * @author Colin But + * @author Wick Dynex + */ +@WebMvcTest(value = PetController.class, + includeFilters = @ComponentScan.Filter(value = PetTypeFormatter.class, type = FilterType.ASSIGNABLE_TYPE)) +@DisabledInNativeImage +@DisabledInAotMode +class PetControllerTests { + + private static final int TEST_OWNER_ID = 1; + + private static final int TEST_PET_ID = 1; + + @Autowired + private MockMvc mockMvc; + + @MockitoBean + private OwnerRepository owners; + + @MockitoBean + private PetTypeRepository types; + + @BeforeEach + void setup() { + PetType cat = new PetType(); + cat.setId(3); + cat.setName("hamster"); + given(this.types.findPetTypes()).willReturn(List.of(cat)); + + Owner owner = new Owner(); + Pet pet = new Pet(); + Pet dog = new Pet(); + owner.addPet(pet); + owner.addPet(dog); + pet.setId(TEST_PET_ID); + dog.setId(TEST_PET_ID + 1); + pet.setName("petty"); + dog.setName("doggy"); + given(this.owners.findById(TEST_OWNER_ID)).willReturn(Optional.of(owner)); + } + + @Test + void initCreationForm() throws Exception { + mockMvc.perform(get("/owners/{ownerId}/pets/new", TEST_OWNER_ID)) + .andExpect(status().isOk()) + .andExpect(view().name("pets/createOrUpdatePetForm")) + .andExpect(model().attributeExists("pet")); + } + + @Test + void processCreationFormSuccess() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "Betty") + .param("type", "hamster") + .param("birthDate", "2015-02-12")) + .andExpect(status().is3xxRedirection()) + .andExpect(view().name("redirect:/owners/{ownerId}")); + } + + @Nested + class ProcessCreationFormHasErrors { + + @Test + void processCreationFormWithBlankName() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "\t \n") + .param("birthDate", "2015-02-12")) + .andExpect(model().attributeHasNoErrors("owner")) + .andExpect(model().attributeHasErrors("pet")) + .andExpect(model().attributeHasFieldErrors("pet", "name")) + .andExpect(model().attributeHasFieldErrorCode("pet", "name", "required")) + .andExpect(status().isOk()) + .andExpect(view().name("pets/createOrUpdatePetForm")); + } + + @Test + void processCreationFormWithDuplicateName() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "petty") + .param("birthDate", "2015-02-12")) + .andExpect(model().attributeHasNoErrors("owner")) + .andExpect(model().attributeHasErrors("pet")) + .andExpect(model().attributeHasFieldErrors("pet", "name")) + .andExpect(model().attributeHasFieldErrorCode("pet", "name", "duplicate")) + .andExpect(status().isOk()) + .andExpect(view().name("pets/createOrUpdatePetForm")); + } + + @Test + void processCreationFormWithMissingPetType() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "Betty") + .param("birthDate", "2015-02-12")) + .andExpect(model().attributeHasNoErrors("owner")) + .andExpect(model().attributeHasErrors("pet")) + .andExpect(model().attributeHasFieldErrors("pet", "type")) + .andExpect(model().attributeHasFieldErrorCode("pet", "type", "required")) + .andExpect(status().isOk()) + .andExpect(view().name("pets/createOrUpdatePetForm")); + } + + @Test + void processCreationFormWithInvalidBirthDate() throws Exception { + LocalDate currentDate = LocalDate.now(); + String futureBirthDate = currentDate.plusMonths(1).toString(); + + mockMvc + .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "Betty") + .param("birthDate", futureBirthDate)) + .andExpect(model().attributeHasNoErrors("owner")) + .andExpect(model().attributeHasErrors("pet")) + .andExpect(model().attributeHasFieldErrors("pet", "birthDate")) + .andExpect(model().attributeHasFieldErrorCode("pet", "birthDate", "typeMismatch.birthDate")) + .andExpect(status().isOk()) + .andExpect(view().name("pets/createOrUpdatePetForm")); + } + + @Test + void initUpdateForm() throws Exception { + mockMvc.perform(get("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID)) + .andExpect(status().isOk()) + .andExpect(model().attributeExists("pet")) + .andExpect(view().name("pets/createOrUpdatePetForm")); + } + + } + + @Test + void processUpdateFormSuccess() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID).param("name", "Betty") + .param("type", "hamster") + .param("birthDate", "2015-02-12")) + .andExpect(status().is3xxRedirection()) + .andExpect(view().name("redirect:/owners/{ownerId}")); + } + + @Nested + class ProcessUpdateFormHasErrors { + + @Test + void processUpdateFormWithInvalidBirthDate() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID).param("name", " ") + .param("birthDate", "2015/02/12")) + .andExpect(model().attributeHasNoErrors("owner")) + .andExpect(model().attributeHasErrors("pet")) + .andExpect(model().attributeHasFieldErrors("pet", "birthDate")) + .andExpect(model().attributeHasFieldErrorCode("pet", "birthDate", "typeMismatch")) + .andExpect(view().name("pets/createOrUpdatePetForm")); + } + + @Test + void processUpdateFormWithBlankName() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID).param("name", " ") + .param("birthDate", "2015-02-12")) + .andExpect(model().attributeHasNoErrors("owner")) + .andExpect(model().attributeHasErrors("pet")) + .andExpect(model().attributeHasFieldErrors("pet", "name")) + .andExpect(model().attributeHasFieldErrorCode("pet", "name", "required")) + .andExpect(view().name("pets/createOrUpdatePetForm")); + } + + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/owner/PetTypeFormatterTests.java b/src/test/java/org/springframework/samples/petclinic/owner/PetTypeFormatterTests.java new file mode 100644 index 0000000..fe4a5f7 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/owner/PetTypeFormatterTests.java @@ -0,0 +1,97 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.owner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Locale; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledInNativeImage; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +/** + * Test class for {@link PetTypeFormatter} + * + * @author Colin But + */ +@ExtendWith(MockitoExtension.class) +@DisabledInNativeImage +class PetTypeFormatterTests { + + @Mock + private PetTypeRepository types; + + private PetTypeFormatter petTypeFormatter; + + @BeforeEach + void setup() { + this.petTypeFormatter = new PetTypeFormatter(types); + } + + @Test + void testPrint() { + PetType petType = new PetType(); + petType.setName("Hamster"); + String petTypeName = this.petTypeFormatter.print(petType, Locale.ENGLISH); + assertThat(petTypeName).isEqualTo("Hamster"); + } + + @Test + void shouldParse() throws ParseException { + given(types.findPetTypes()).willReturn(makePetTypes()); + PetType petType = petTypeFormatter.parse("Bird", Locale.ENGLISH); + assertThat(petType.getName()).isEqualTo("Bird"); + } + + @Test + void shouldThrowParseException() { + given(types.findPetTypes()).willReturn(makePetTypes()); + Assertions.assertThrows(ParseException.class, () -> { + petTypeFormatter.parse("Fish", Locale.ENGLISH); + }); + } + + /** + * Helper method to produce some sample pet types just for test purpose + * @return {@link Collection} of {@link PetType} + */ + private List makePetTypes() { + List petTypes = new ArrayList<>(); + petTypes.add(new PetType() { + { + setName("Dog"); + } + }); + petTypes.add(new PetType() { + { + setName("Bird"); + } + }); + return petTypes; + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/owner/PetValidatorTests.java b/src/test/java/org/springframework/samples/petclinic/owner/PetValidatorTests.java new file mode 100644 index 0000000..d7543ac --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/owner/PetValidatorTests.java @@ -0,0 +1,117 @@ +/* + * Copyright 2012-2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.owner; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledInNativeImage; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.validation.Errors; +import org.springframework.validation.MapBindingResult; + +import java.time.LocalDate; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Test class for {@link PetValidator} + * + * @author Wick Dynex + */ +@ExtendWith(MockitoExtension.class) +@DisabledInNativeImage +class PetValidatorTests { + + private PetValidator petValidator; + + private Pet pet; + + private PetType petType; + + private Errors errors; + + private static final String petName = "Buddy"; + + private static final String petTypeName = "Dog"; + + private static final LocalDate petBirthDate = LocalDate.of(1990, 1, 1); + + @BeforeEach + void setUp() { + petValidator = new PetValidator(); + pet = new Pet(); + petType = new PetType(); + errors = new MapBindingResult(new HashMap<>(), "pet"); + } + + @Test + void validate() { + petType.setName(petTypeName); + pet.setName(petName); + pet.setType(petType); + pet.setBirthDate(petBirthDate); + + petValidator.validate(pet, errors); + + assertFalse(errors.hasErrors()); + } + + @Nested + class ValidateHasErrors { + + @Test + void validateWithInvalidPetName() { + petType.setName(petTypeName); + pet.setName(""); + pet.setType(petType); + pet.setBirthDate(petBirthDate); + + petValidator.validate(pet, errors); + + assertTrue(errors.hasFieldErrors("name")); + } + + @Test + void validateWithInvalidPetType() { + pet.setName(petName); + pet.setType(null); + pet.setBirthDate(petBirthDate); + + petValidator.validate(pet, errors); + + assertTrue(errors.hasFieldErrors("type")); + } + + @Test + void validateWithInvalidBirthDate() { + petType.setName(petTypeName); + pet.setName(petName); + pet.setType(petType); + pet.setBirthDate(null); + + petValidator.validate(pet, errors); + + assertTrue(errors.hasFieldErrors("birthDate")); + } + + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/owner/VisitControllerTests.java b/src/test/java/org/springframework/samples/petclinic/owner/VisitControllerTests.java new file mode 100644 index 0000000..bd51302 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/owner/VisitControllerTests.java @@ -0,0 +1,94 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.owner; + +import static org.mockito.BDDMockito.given; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledInNativeImage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest; +import org.springframework.test.context.aot.DisabledInAotMode; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.Optional; + +/** + * Test class for {@link VisitController} + * + * @author Colin But + * @author Wick Dynex + */ +@WebMvcTest(VisitController.class) +@DisabledInNativeImage +@DisabledInAotMode +class VisitControllerTests { + + private static final int TEST_OWNER_ID = 1; + + private static final int TEST_PET_ID = 1; + + @Autowired + private MockMvc mockMvc; + + @MockitoBean + private OwnerRepository owners; + + @BeforeEach + void init() { + Owner owner = new Owner(); + Pet pet = new Pet(); + owner.addPet(pet); + pet.setId(TEST_PET_ID); + given(this.owners.findById(TEST_OWNER_ID)).willReturn(Optional.of(owner)); + } + + @Test + void initNewVisitForm() throws Exception { + mockMvc.perform(get("/owners/{ownerId}/pets/{petId}/visits/new", TEST_OWNER_ID, TEST_PET_ID)) + .andExpect(status().isOk()) + .andExpect(view().name("pets/createOrUpdateVisitForm")); + } + + @Test + void processNewVisitFormSuccess() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/{petId}/visits/new", TEST_OWNER_ID, TEST_PET_ID) + .param("name", "George") + .param("description", "Visit Description")) + .andExpect(status().is3xxRedirection()) + .andExpect(view().name("redirect:/owners/{ownerId}")); + } + + @Test + void processNewVisitFormHasErrors() throws Exception { + mockMvc + .perform(post("/owners/{ownerId}/pets/{petId}/visits/new", TEST_OWNER_ID, TEST_PET_ID).param("name", + "George")) + .andExpect(model().attributeHasErrors("visit")) + .andExpect(status().isOk()) + .andExpect(view().name("pets/createOrUpdateVisitForm")); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceTests.java b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceTests.java new file mode 100644 index 0000000..ddc5bab --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceTests.java @@ -0,0 +1,251 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.service; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.LocalDate; +import java.util.Collection; +import java.util.Optional; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase.Replace; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.samples.petclinic.owner.Owner; +import org.springframework.samples.petclinic.owner.OwnerRepository; +import org.springframework.samples.petclinic.owner.Pet; +import org.springframework.samples.petclinic.owner.PetType; +import org.springframework.samples.petclinic.owner.PetTypeRepository; +import org.springframework.samples.petclinic.owner.Visit; +import org.springframework.samples.petclinic.vet.Vet; +import org.springframework.samples.petclinic.vet.VetRepository; +import org.springframework.transaction.annotation.Transactional; + +/** + * Integration test of the Service and the Repository layer. + *

+ * ClinicServiceSpringDataJpaTests subclasses benefit from the following services provided + * by the Spring TestContext Framework: + *

+ *
    + *
  • Spring IoC container caching which spares us unnecessary set up + * time between test execution.
  • + *
  • Dependency Injection of test fixture instances, meaning that we + * don't need to perform application context lookups. See the use of + * {@link Autowired @Autowired} on the instance variable, which uses + * autowiring by type. + *
  • Transaction management, meaning each test method is executed in + * its own transaction, which is automatically rolled back by default. Thus, even if tests + * insert or otherwise change database state, there is no need for a teardown or cleanup + * script. + *
  • An {@link org.springframework.context.ApplicationContext ApplicationContext} is + * also inherited and can be used for explicit bean lookup if necessary.
  • + *
+ * + * @author Ken Krebs + * @author Rod Johnson + * @author Juergen Hoeller + * @author Sam Brannen + * @author Michael Isvy + * @author Dave Syer + */ +@DataJpaTest +// Ensure that if the mysql profile is active we connect to the real database: +@AutoConfigureTestDatabase(replace = Replace.NONE) +// @TestPropertySource("/application-postgres.properties") +class ClinicServiceTests { + + @Autowired + protected OwnerRepository owners; + + @Autowired + protected PetTypeRepository types; + + @Autowired + protected VetRepository vets; + + private final Pageable pageable = Pageable.unpaged(); + + @Test + void shouldFindOwnersByLastName() { + Page owners = this.owners.findByLastNameStartingWith("Davis", pageable); + assertThat(owners).hasSize(2); + + owners = this.owners.findByLastNameStartingWith("Daviss", pageable); + assertThat(owners).isEmpty(); + } + + @Test + void shouldFindSingleOwnerWithPet() { + Optional optionalOwner = this.owners.findById(1); + assertThat(optionalOwner).isPresent(); + Owner owner = optionalOwner.get(); + assertThat(owner.getLastName()).startsWith("Franklin"); + assertThat(owner.getPets()).hasSize(1); + assertThat(owner.getPets().get(0).getType()).isNotNull(); + assertThat(owner.getPets().get(0).getType().getName()).isEqualTo("cat"); + } + + @Test + @Transactional + void shouldInsertOwner() { + Page owners = this.owners.findByLastNameStartingWith("Schultz", pageable); + int found = (int) owners.getTotalElements(); + + Owner owner = new Owner(); + owner.setFirstName("Sam"); + owner.setLastName("Schultz"); + owner.setAddress("4, Evans Street"); + owner.setCity("Wollongong"); + owner.setTelephone("4444444444"); + this.owners.save(owner); + assertThat(owner.getId()).isNotZero(); + + owners = this.owners.findByLastNameStartingWith("Schultz", pageable); + assertThat(owners.getTotalElements()).isEqualTo(found + 1); + } + + @Test + @Transactional + void shouldUpdateOwner() { + Optional optionalOwner = this.owners.findById(1); + assertThat(optionalOwner).isPresent(); + Owner owner = optionalOwner.get(); + String oldLastName = owner.getLastName(); + String newLastName = oldLastName + "X"; + + owner.setLastName(newLastName); + this.owners.save(owner); + + // retrieving new name from database + optionalOwner = this.owners.findById(1); + assertThat(optionalOwner).isPresent(); + owner = optionalOwner.get(); + assertThat(owner.getLastName()).isEqualTo(newLastName); + } + + @Test + void shouldFindAllPetTypes() { + Collection petTypes = this.types.findPetTypes(); + + PetType petType1 = EntityUtils.getById(petTypes, PetType.class, 1); + assertThat(petType1.getName()).isEqualTo("cat"); + PetType petType4 = EntityUtils.getById(petTypes, PetType.class, 4); + assertThat(petType4.getName()).isEqualTo("snake"); + } + + @Test + @Transactional + void shouldInsertPetIntoDatabaseAndGenerateId() { + Optional optionalOwner = this.owners.findById(6); + assertThat(optionalOwner).isPresent(); + Owner owner6 = optionalOwner.get(); + + int found = owner6.getPets().size(); + + Pet pet = new Pet(); + pet.setName("bowser"); + Collection types = this.types.findPetTypes(); + pet.setType(EntityUtils.getById(types, PetType.class, 2)); + pet.setBirthDate(LocalDate.now()); + owner6.addPet(pet); + assertThat(owner6.getPets()).hasSize(found + 1); + + this.owners.save(owner6); + + optionalOwner = this.owners.findById(6); + assertThat(optionalOwner).isPresent(); + owner6 = optionalOwner.get(); + assertThat(owner6.getPets()).hasSize(found + 1); + // checks that id has been generated + pet = owner6.getPet("bowser"); + assertThat(pet.getId()).isNotNull(); + } + + @Test + @Transactional + void shouldUpdatePetName() { + Optional optionalOwner = this.owners.findById(6); + assertThat(optionalOwner).isPresent(); + Owner owner6 = optionalOwner.get(); + + Pet pet7 = owner6.getPet(7); + String oldName = pet7.getName(); + + String newName = oldName + "X"; + pet7.setName(newName); + this.owners.save(owner6); + + optionalOwner = this.owners.findById(6); + assertThat(optionalOwner).isPresent(); + owner6 = optionalOwner.get(); + pet7 = owner6.getPet(7); + assertThat(pet7.getName()).isEqualTo(newName); + } + + @Test + void shouldFindVets() { + Collection vets = this.vets.findAll(); + + Vet vet = EntityUtils.getById(vets, Vet.class, 3); + assertThat(vet.getLastName()).isEqualTo("Douglas"); + assertThat(vet.getNrOfSpecialties()).isEqualTo(2); + assertThat(vet.getSpecialties().get(0).getName()).isEqualTo("dentistry"); + assertThat(vet.getSpecialties().get(1).getName()).isEqualTo("surgery"); + } + + @Test + @Transactional + void shouldAddNewVisitForPet() { + Optional optionalOwner = this.owners.findById(6); + assertThat(optionalOwner).isPresent(); + Owner owner6 = optionalOwner.get(); + + Pet pet7 = owner6.getPet(7); + int found = pet7.getVisits().size(); + Visit visit = new Visit(); + visit.setDescription("test"); + + owner6.addVisit(pet7.getId(), visit); + this.owners.save(owner6); + + assertThat(pet7.getVisits()) // + .hasSize(found + 1) // + .allMatch(value -> value.getId() != null); + } + + @Test + void shouldFindVisitsByPetId() { + Optional optionalOwner = this.owners.findById(6); + assertThat(optionalOwner).isPresent(); + Owner owner6 = optionalOwner.get(); + + Pet pet7 = owner6.getPet(7); + Collection visits = pet7.getVisits(); + + assertThat(visits) // + .hasSize(2) // + .element(0) + .extracting(Visit::getDate) + .isNotNull(); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/service/EntityUtils.java b/src/test/java/org/springframework/samples/petclinic/service/EntityUtils.java new file mode 100644 index 0000000..d1ce9d7 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/service/EntityUtils.java @@ -0,0 +1,53 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.service; + +import org.springframework.orm.ObjectRetrievalFailureException; +import org.springframework.samples.petclinic.model.BaseEntity; + +import java.util.Collection; + +/** + * Utility methods for handling entities. Separate from the BaseEntity class mainly + * because of dependency on the ORM-associated ObjectRetrievalFailureException. + * + * @author Juergen Hoeller + * @author Sam Brannen + * @see org.springframework.samples.petclinic.model.BaseEntity + * @since 29.10.2003 + */ +public abstract class EntityUtils { + + /** + * Look up the entity of the given class with the given id in the given collection. + * @param entities the collection to search + * @param entityClass the entity class to look up + * @param entityId the entity id to look up + * @return the found entity + * @throws ObjectRetrievalFailureException if the entity was not found + */ + public static T getById(Collection entities, Class entityClass, int entityId) + throws ObjectRetrievalFailureException { + for (T entity : entities) { + if (entity.getId() != null && entity.getId() == entityId && entityClass.isInstance(entity)) { + return entity; + } + } + throw new ObjectRetrievalFailureException(entityClass, entityId); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/system/CrashControllerIntegrationTests.java b/src/test/java/org/springframework/samples/petclinic/system/CrashControllerIntegrationTests.java new file mode 100644 index 0000000..43065c2 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/system/CrashControllerIntegrationTests.java @@ -0,0 +1,101 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.system; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; + +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; +import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; +import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.resttestclient.TestRestTemplate; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; + +/** + * Integration Test for {@link CrashController}. + * + * @author Alex Lutz + */ +// NOT Waiting https://github.com/spring-projects/spring-boot/issues/5574 +@SpringBootTest(webEnvironment = RANDOM_PORT, + properties = { "spring.web.error.include-message=ALWAYS", "management.endpoints.access.default=none" }) +@AutoConfigureTestRestTemplate +class CrashControllerIntegrationTests { + + @Value("${local.server.port}") + private int port; + + @Autowired + private TestRestTemplate rest; + + @Test + void triggerExceptionJson() { + ResponseEntity> resp = rest.exchange( + RequestEntity.get("http://localhost:" + port + "/oups").build(), + new ParameterizedTypeReference>() { + }); + assertThat(resp).isNotNull(); + assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); + assertThat(resp.getBody()).containsKey("timestamp"); + assertThat(resp.getBody()).containsKey("status"); + assertThat(resp.getBody()).containsKey("error"); + assertThat(resp.getBody()).containsEntry("message", + "Expected: controller used to showcase what happens when an exception is thrown"); + assertThat(resp.getBody()).containsEntry("path", "/oups"); + } + + @Test + void triggerExceptionHtml() { + HttpHeaders headers = new HttpHeaders(); + headers.setAccept(List.of(MediaType.TEXT_HTML)); + ResponseEntity resp = rest.exchange("http://localhost:" + port + "/oups", HttpMethod.GET, + new HttpEntity<>(headers), String.class); + assertThat(resp).isNotNull(); + assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); + assertThat(resp.getBody()).isNotNull(); + // html: + assertThat(resp.getBody()).containsSubsequence("", "

", "Something happened...", "

", "

", + "Expected:", "controller", "used", "to", "showcase", "what", "happens", "when", "an", "exception", "is", + "thrown", "

", ""); + // Not the whitelabel error page: + assertThat(resp.getBody()).doesNotContain("Whitelabel Error Page", + "This application has no explicit mapping for"); + } + + @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, + DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class }) + static class TestConfiguration { + + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/system/CrashControllerTests.java b/src/test/java/org/springframework/samples/petclinic/system/CrashControllerTests.java new file mode 100644 index 0000000..bb748ba --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/system/CrashControllerTests.java @@ -0,0 +1,41 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.system; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +/** + * Test class for {@link CrashController} + * + * @author Colin But + * @author Alex Lutz + */ +// Waiting https://github.com/spring-projects/spring-boot/issues/5574 ..good +// luck ((plain(st) UNIT test)! :) +class CrashControllerTests { + + final CrashController testee = new CrashController(); + + @Test + void triggerException() { + assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> testee.triggerException()) + .withMessageContaining("Expected: controller used to showcase what happens when an exception is thrown"); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/system/I18nPropertiesSyncTest.java b/src/test/java/org/springframework/samples/petclinic/system/I18nPropertiesSyncTest.java new file mode 100644 index 0000000..e5a5669 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/system/I18nPropertiesSyncTest.java @@ -0,0 +1,138 @@ +package org.springframework.samples.petclinic.system; + +import org.junit.jupiter.api.Test; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Pattern; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.fail; + +/** + * This test ensures that there are no hard-coded strings without internationalization in + * any HTML files. Also ensures that a string is translated in every language to avoid + * partial translations. + * + * @author Anuj Ashok Potdar + */ +public class I18nPropertiesSyncTest { + + private static final String I18N_DIR = "src/main/resources"; + + private static final String BASE_NAME = "messages"; + + public static final String PROPERTIES = ".properties"; + + private static final Pattern HTML_TEXT_LITERAL = Pattern.compile(">([^<>{}]+)<"); + + private static final Pattern BRACKET_ONLY = Pattern.compile("<[^>]*>\\s*[\\[\\]](?: )?\\s*]*>"); + + private static final Pattern HAS_TH_TEXT_ATTRIBUTE = Pattern.compile("th:(u)?text\\s*=\\s*\"[^\"]+\""); + + @Test + void checkNonInternationalizedStrings() throws Exception { + Path root = Path.of("src/main"); + List files; + + try (Stream stream = Files.walk(root)) { + files = stream.filter(p -> p.toString().endsWith(".java") || p.toString().endsWith(".html")) + .filter(p -> !p.toString().contains("/test/")) + .filter(p -> !p.getFileName().toString().endsWith("Test.java")) + .toList(); + } + + StringBuilder report = new StringBuilder(); + + for (Path file : files) { + List lines = Files.readAllLines(file); + for (int i = 0; i < lines.size(); i++) { + String line = lines.get(i).trim(); + + if (line.startsWith("//") || line.startsWith("@") || line.contains("log.") + || line.contains("System.out")) { + continue; + } + + if (file.toString().endsWith(".html")) { + boolean hasLiteralText = HTML_TEXT_LITERAL.matcher(line).find(); + boolean hasThTextAttribute = HAS_TH_TEXT_ATTRIBUTE.matcher(line).find(); + boolean isBracketOnly = BRACKET_ONLY.matcher(line).find(); + + if (hasLiteralText && !line.contains("#{") && !hasThTextAttribute && !isBracketOnly) { + report.append("HTML: ") + .append(file) + .append(" Line ") + .append(i + 1) + .append(": ") + .append(line) + .append("\n"); + } + } + } + } + + if (!report.isEmpty()) { + fail("Hardcoded (non-internationalized) strings found:\n" + report); + } + } + + @Test + void checkI18nPropertyFilesAreInSync() throws Exception { + List propertyFiles; + try (Stream stream = Files.walk(Path.of(I18N_DIR))) { + propertyFiles = stream.filter(p -> p.getFileName().toString().startsWith(BASE_NAME)) + .filter(p -> p.getFileName().toString().endsWith(PROPERTIES)) + .toList(); + } + + Map localeToProps = new HashMap<>(); + + for (Path path : propertyFiles) { + Properties props = new Properties(); + try (var reader = Files.newBufferedReader(path)) { + props.load(reader); + localeToProps.put(path.getFileName().toString(), props); + } + } + + String baseFile = BASE_NAME + PROPERTIES; + Properties baseProps = localeToProps.get(baseFile); + if (baseProps == null) { + fail("Base properties file '" + baseFile + "' not found."); + return; + } + + Set baseKeys = baseProps.stringPropertyNames(); + StringBuilder report = new StringBuilder(); + + for (Map.Entry entry : localeToProps.entrySet()) { + String fileName = entry.getKey(); + // We use fallback logic to include english strings, hence messages_en is not + // populated. + if (fileName.equals(baseFile) || "messages_en.properties".equals(fileName)) { + continue; + } + + Properties props = entry.getValue(); + Set missingKeys = new TreeSet<>(baseKeys); + missingKeys.removeAll(props.stringPropertyNames()); + + if (!missingKeys.isEmpty()) { + report.append("Missing keys in ").append(fileName).append(":\n"); + missingKeys.forEach(k -> report.append(" ").append(k).append("\n")); + } + } + + if (!report.isEmpty()) { + fail("Translation files are not in sync:\n" + report); + } + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/vet/VetControllerTests.java b/src/test/java/org/springframework/samples/petclinic/vet/VetControllerTests.java new file mode 100644 index 0000000..208758c --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/vet/VetControllerTests.java @@ -0,0 +1,100 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.samples.petclinic.vet; + +import org.assertj.core.util.Lists; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledInNativeImage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.http.MediaType; +import org.springframework.test.context.aot.DisabledInAotMode; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for the {@link VetController} + */ + +@WebMvcTest(VetController.class) +@DisabledInNativeImage +@DisabledInAotMode +class VetControllerTests { + + @Autowired + private MockMvc mockMvc; + + @MockitoBean + private VetRepository vets; + + private Vet james() { + Vet james = new Vet(); + james.setFirstName("James"); + james.setLastName("Carter"); + james.setId(1); + return james; + } + + private Vet helen() { + Vet helen = new Vet(); + helen.setFirstName("Helen"); + helen.setLastName("Leary"); + helen.setId(2); + Specialty radiology = new Specialty(); + radiology.setId(1); + radiology.setName("radiology"); + helen.addSpecialty(radiology); + return helen; + } + + @BeforeEach + void setup() { + given(this.vets.findAll()).willReturn(Lists.newArrayList(james(), helen())); + given(this.vets.findAll(any(Pageable.class))) + .willReturn(new PageImpl(Lists.newArrayList(james(), helen()))); + + } + + @Test + void showVetListHtml() throws Exception { + + mockMvc.perform(MockMvcRequestBuilders.get("/vets.html?page=1")) + .andExpect(status().isOk()) + .andExpect(model().attributeExists("listVets")) + .andExpect(view().name("vets/vetList")); + + } + + @Test + void showResourcesVetList() throws Exception { + ResultActions actions = mockMvc.perform(get("/vets").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + actions.andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$.vetList[0].id").value(1)); + } + +} diff --git a/src/test/java/org/springframework/samples/petclinic/vet/VetTests.java b/src/test/java/org/springframework/samples/petclinic/vet/VetTests.java new file mode 100644 index 0000000..2159350 --- /dev/null +++ b/src/test/java/org/springframework/samples/petclinic/vet/VetTests.java @@ -0,0 +1,41 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.vet; + +import org.junit.jupiter.api.Test; +import org.springframework.util.SerializationUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Dave Syer + */ +class VetTests { + + @Test + void serialization() { + Vet vet = new Vet(); + vet.setFirstName("Zaphod"); + vet.setLastName("Beeblebrox"); + vet.setId(123); + @SuppressWarnings("deprecation") + Vet other = (Vet) SerializationUtils.deserialize(SerializationUtils.serialize(vet)); + assertThat(other.getFirstName()).isEqualTo(vet.getFirstName()); + assertThat(other.getLastName()).isEqualTo(vet.getLastName()); + assertThat(other.getId()).isEqualTo(vet.getId()); + } + +} diff --git a/src/test/jmeter/petclinic_test_plan.jmx b/src/test/jmeter/petclinic_test_plan.jmx new file mode 100644 index 0000000..89c7bf2 --- /dev/null +++ b/src/test/jmeter/petclinic_test_plan.jmx @@ -0,0 +1,540 @@ + + + + + + false + false + + + + PETCLINIC_HOST + localhost + = + + + PETCLINIC_PORT + 8080 + = + + + CONTEXT_WEB + + = + + + + + + + + continue + + false + 10 + + 500 + 10 + 1361531541000 + 1361531541000 + false + + + true + Original : 500 - 10 - 10 + + + + 300 + + + + + + + ${PETCLINIC_HOST} + ${PETCLINIC_PORT} + + + + + + 4 + + + + + true + + + + 1 + 3 + 1 + count + + false + + + + 1 + 3 + 1 + petCount + + false + + + + + + + + + + + + + ${CONTEXT_WEB}/ + GET + true + false + true + false + false + + + + + + + + + + + + + + ${CONTEXT_WEB}/resources/css/petclinic.css + GET + true + false + true + false + false + + + + + + + + + + + + + + ${CONTEXT_WEB}/webjars/bootstrap/dist/js/bootstrap.bundle.min.js + GET + true + false + true + false + false + + + + + + + + + + + + + + ${CONTEXT_WEB}/vets.html + GET + true + false + true + false + false + + + + + + + + + + + + + + ${CONTEXT_WEB}/owners/find + GET + true + false + true + false + false + + + + + + + + + + + + + + ${CONTEXT_WEB}/owners?lastName= + GET + true + false + true + false + false + + + + + + + + + + + + + + ${CONTEXT_WEB}/owners/${count} + GET + true + false + true + false + false + + + + + + + + + + + + + + ${CONTEXT_WEB}/owners/${count}/edit + GET + true + false + true + false + false + + + + + + + + false + Test + = + true + firstName + + + false + ${count} + = + true + lastName + + + false + 1234+Test+St. + = + true + address + + + false + TestCity + = + true + city + + + false + 612345678 + = + true + telephone + + + + + + + + + + ${CONTEXT_WEB}/owners/${count}/edit + POST + true + false + true + false + false + + + + + + + + + + + + + + ${CONTEXT_WEB}/owners/${count}/pets/new + GET + true + false + true + false + false + + + + + + + + false + Test+Fluffy+${petCount} + = + true + name + + + false + 2020-12-20 + = + true + birthDate + + + false + cat + = + true + type + + + + + + + + + + ${CONTEXT_WEB}/owners/${count}/pets/new + POST + true + false + true + false + false + + + + + + + + + + + + ${CONTEXT_WEB}/owners/${count}/pets/${petCount}/visits/new + GET + true + false + true + false + + + + + + + + + + false + 2013-02-22 + = + true + date + + + false + visit + = + true + description + + + + + + + + ${CONTEXT_WEB}/owners/${count}/pets/${petCount}/visits/new + POST + true + false + true + false + false + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + false + false + false + false + false + 0 + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + false + false + false + false + false + 0 + true + true + + + + + + + + +